[已解决问题] sql 注入过滤
提问时间: 2008-05-07 16:38
悬赏分:15 浏览:114 次

用如下语句过滤

private const string StrKeyWord = @"select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|""|or|and";
  private const string StrRegex = @"[-|;|,|/|(|)|[|]|}|{|%|@|*|!|']";

  public static bool CheckKeyWord(string sWord)   
  {
   if (Regex.IsMatch(sWord, StrKeyWord, RegexOptions.IgnoreCase) || Regex.IsMatch(sWord, StrRegex))
    return true;
   return false;
  }

 

在页面中

if(CheckKeyWord(TextBox1.Text))

{

--包含非法字符
}

else

{
}

 

时出错了

正在分析“select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|"|or|and”- ) 不足。参数名: select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|"|or|and

 


最佳答案
兄弟,提示信息已经说得很清楚了哦——你的正则表达式写错了。

改成这个就可以了
@"select|insert|delete|from|count\(|drop table|update|truncate|asc\(|mid\(|char\(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|""|or|and";

原因:圆括号是正则表达式的一个特殊字符,要匹配它的话就需要转义。

That's it!
5/7/2008 7:32:51 PM 回答者:电机拖动
其它回答(4)
应该是里面的括号影响到了,试着把括号都转义了
如果只是防注入,把传过来的参数直接Replace(" ","")就能搞定
5天前   回答者:丁学 - 老鸟四级
干吗不用SqlPramenter(可能拼写有误)~~~?还要自己做SQL过滤~~
5天前   回答者:沙加 - 老鸟四级
不知道楼主做法为了什么,如果是初级安全问题,同意沙加的说法,还不如用SqlParameter(以改正了沙加的拼写错误)更好些!
4天前   回答者:刚刚 - 小虾三级
存储过程流路过
4天前   回答者:风海迷沙 - 菜鸟二级
评论
5天前   叶子绿了 :
为什么会出现这样子的错误,头大呀
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除