我知道以这种方式保护SQL注入是错误的(正则表达式),我必须使用参数化查询,但这次我有一个特殊的情况。我正在编写一个表单生成器程序,我必须编写一个复杂的搜索用户控件,所以这次我没有别的办法(我想)!
我正在寻找一个正则表达式来检查输入字符串(服务器端)是否存在任何类似查询的攻击。</ p>
答案 0 :(得分:1)
我还会说使用参数化存储过程以正确的方式执行此操作。基本思路是将所有参数设置为null,然后只传递要搜索的参数。您的WHERE子句看起来像这样
WHERE (MyColumn1=@Param1 OR @Pram1 IS NULL)
AND (MyColumn2=@Param2 OR @Pram2 IS NULL)
以下是一些更多细节
http://weblogs.asp.net/rmclaws/archive/2004/02/18/75381.aspx
答案 1 :(得分:0)
这很难,因为正则表达式可以使用两种方法:
两者都很难。我的猜测是#1更安全,因为你拒绝除了有效的SQL以外的所有SQL,但是在很大程度上防止有效SQL中的无效SQL并不会过多限制可能性。
最后你会发现使用参数更安全,因为只要你不执行传递的字符串就没有SQL注入的危险。