asp+sql 如何有效的防止sql注入
追问:您说那个写个固定函数代替 request 这个是要从开发站的时候写好对吧。
我现在站已经开发完了。之前的就是字段什么的都写的很简单。
如今也没有充分的时间重新开发。
只能添加一些限制。
昨天我百度了好久 说在conn里面加限制。我加上了 报错?!老大你贴这代码 怎么用?
追问:您说那个写个固定函数代替 request 这个是要从开发站的时候写好对吧。
我现在站已经开发完了。之前的就是字段什么的都写的很简单。
如今也没有充分的时间重新开发。
只能添加一些限制。
昨天我百度了好久 说在conn里面加限制。我加上了 报错?!老大你贴这代码 怎么用?
答案:SQL注入,一般由 request 提交而来,所以过滤 request参数即可。
比如,正常获取 id 为 request("id") ,获取后,对其进行强制转为int型,如
id = cint(request.querystring("id"))
同理,凡是数字型的,一律进行判断是否数字或强制转换。
如果是字符型的,要写入SQL语句的,一律对单引号进行转义,如
SQLserver和Access中,替换成两个单引号。MYSQL中替换成 \' 等。
可以写成一个固定的函数来代替request,可以达到防止注入的目的。
网上也有一些通用的过滤程序,可以解决大部分问题,但更多的时候,也并不能防止注入的发生,同时,也会给正常提交带来一些麻烦。
其他:问题补充:插入以后还是无法防止sql注入,麻烦检查下代码是否有效!!! Then Response.redirect 首先过滤关键字
///
/// </summary>
/// <param name="text">用户输入的文字</param>
/// <param name="maxlength">最大的长度</param>
/// <returns>返回验证后的文字</returns>
public static string InputText(string text, int maxlength)
{
text = text.ToLower().Trim();
if (string.IsNullOrEmpty(text))
return string.Empty;
if (text.Length > maxlength)
text = text.Substring(0, maxlength);
text = Regex.Replace(text, "[\\s]{2,{", " ");
text = Regex.Replace(text, "(<[b|B][r|R]/*>)+|(<[p|P](.|\\n)*?>)", "\n"); //<br>
text = Regex.Replace(text, "(\\s*&[n|N][b|B][s|S][p|P];\\s*)+", " "); //
text = Regex.Replace(text, "<(.|\\n)*?>", string.Empty); //any other tags
text = Regex.Replace(text,"=", "");
text = Regex.Replace(text, "%", "");
text = Regex.Replace(text, "'", "");
text = Regex.Replace(text, "select", "");
text = Regex.Replace(text, "insert", "");
text = Regex.Replace(text, "delete", "");
text = Regex.Replace(text, "or", "");
text = Regex.Replace(text, "exec", "");
text = Regex.Replace(text, "--", "");
text = Regex.Replace(text, "and", "");
text = Regex.Replace(text, "where", "");
text = Regex.Replace(text, "update", "");
text = Regex.Replace(text, "script", "");
text = Regex.Replace(text, "iframe", "");
text = Regex.Replace(text, "master", "");
text = Regex.Replace(text, "exec", "");
text = Regex.Replace(text, "<", "");
text = Regex.Replace(text, ">", "");
text = Regex.Replace(text, "\r\n", "");
return text;
}
另外不要用SQL拼接字符穿,用SqlParameter传参数
例如: public static DataTable SearchAccessPlanByTaskId(string taskId)
{
try
{
string sql = "select * from C_VisitPlan where TaskID=@taskId";
SQLiteParameter[] sp = {
new SQLiteParameter("@taskId",taskId)
};
clsSqLiteInstance sqlinst = new clsSqLiteInstance("MainChanged.db");
return sqlinst.GetDataTable(sql, sp);
}
catch (Exception ex)
{
return null;
}
} 这属于网站程序安全,建议找专业做服务器安全和网站安全的来给你解决把。sinesafe不错。
上一个:asp如何实现页面导入
下一个:asp 注释