通用分页存储过程真的有注入漏洞吗?
2009-01-15 10:19:21 来源:WEB开发网查询方式,根据用户的姓来查询。要想最终的存储过程执行语法正确,同时不存在注入漏洞, 此时条件的正确格式是:and first_name like '%Jim''s dog%'。
我们可以看到条件Jim's dog组装成SQL后,中间的单引号一定要变成两个。为了避免注入,我一般这样处理SQL拼接的安全问题:在C#写程序的时候应该这样写:
/// <summary>
/// 屏蔽字符串中的特殊字符
/// by minjiang 07-07-06
/// </summary>
public string SafeRequest(string str)
{
//定义要返回的字符串
string sReturn;
//将要处理的字符串转换为小写字母
str = str.ToLower();
//定义特殊字符串
string SQL_KILL = "'|and|exec|insert|select|delete|update|count|*|%
|chr|mid|master|truncate|char|declare|set|;|from|=|--|drop|<|>";
char[] separator ={ '|' };
string[] sql = SQL_KILL.Split(separator);
for(int i=0;i<sql .Length ;i++)
{
//如果有特殊字符则将它替换成为空
if(str.IndexOf (sql [i].ToString ().ToLower ())>-1)
{
//把单引号替换成双引号
if (sql[i].ToString() == "'")
{ str = str.Replace("'", "''"); }
else
{
//把敏感字符替换成空
str = str.Replace(sql[i].ToString().ToLower(), "");
}
}
}
sReturn = str;
return sReturn;
}
if(sUserName!="")
{
strWhere +=" and first_name like'%"+this.SafeRequest(sUserName)+"%'"
}
更多精彩
赞助商链接