首页 新闻 会员 周边

sql 注入过滤

0
悬赏园豆:15 [已解决问题] 解决于 2008-05-08 14:06
<P>用如下语句过滤</P> <P>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";<BR>&nbsp;&nbsp;private const string StrRegex = @"[-|;|,|/|(|)|[|]|}|{|%|@|*|!|']";</P> <P>&nbsp;&nbsp;public static bool CheckKeyWord(string sWord)&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if (Regex.IsMatch(sWord, StrKeyWord, RegexOptions.IgnoreCase) || Regex.IsMatch(sWord, StrRegex))<BR>&nbsp;&nbsp;&nbsp;&nbsp;return true;<BR>&nbsp;&nbsp;&nbsp;return false;<BR>&nbsp;&nbsp;}</P> <P>&nbsp;</P> <P>在页面中</P> <P>if(CheckKeyWord(TextBox1.Text))</P> <P>{</P> <P>--包含非法字符<BR>}</P> <P>else</P> <P>{<BR>}</P> <P>&nbsp;</P> <P>时出错了</P> <H2><I>正在分析“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</I> </H2> <P>&nbsp;</P>
叶子绿了的主页 叶子绿了 | 初学一级 | 园豆:50
提问于:2008-05-07 16:38
< >
分享
最佳答案
0
兄弟,提示信息已经说得很清楚了哦——你的正则表达式写错了。 改成这个就可以了 @"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!
电机拖动 | 小虾三级 |园豆:1295 | 2008-05-07 19:32
其他回答(4)
0
应该是里面的括号影响到了,试着把括号都转义了 如果只是防注入,把传过来的参数直接Replace(" ","")就能搞定
丁学 | 园豆:18730 (专家六级) | 2008-05-07 18:51
0
干吗不用SqlPramenter(可能拼写有误)~~~?还要自己做SQL过滤~~
沙加 | 园豆:3680 (老鸟四级) | 2008-05-07 21:12
0
不知道楼主做法为了什么,如果是初级安全问题,同意沙加的说法,还不如用SqlParameter(以改正了沙加的拼写错误)更好些!
刚刚 | 园豆:3151 (老鸟四级) | 2008-05-07 23:35
0
存储过程流路过
风海迷沙 | 园豆:4453 (老鸟四级) | 2008-05-08 11:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册