使用正则表达式阻止SQL注入

时间:2011-02-20 07:59:16

标签: .net sql-server sql-injection

我知道以这种方式保护SQL注入是错误的(正则表达式),我必须使用参数化查询,但这次我有一个特殊的情况。我正在编写一个表单生成器程序,我必须编写一个复杂的搜索用户控件,所以这次我没有别的办法(我想)!

我正在寻找一个正则表达式来检查输入字符串(服务器端)是否存在任何类似查询的攻击。<​​/ p>

2 个答案:

答案 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
  2. 拒绝无效的SQL
  3. 两者都很难。我的猜测是#1更安全,因为你拒绝除了有效的SQL以外的所有SQL,但是在很大程度上防止有效SQL中的无效SQL并不会过多限制可能性。

    最后你会发现使用参数更安全,因为只要你不执行传递的字符串就没有SQL注入的危险。