在没有参数化查询的情况下防止SQL注入?

时间:2013-04-27 00:14:13

标签: c# sql-injection rule-engine

我正在使用ASP.NET,C#和MS SQL,我创建了一个允许用户构建复杂规则的规则构建器页面。此页面构建SQL调用中“Where”子句之后的内容,但规则页面无法构建子查询,操作顺序或其他非常复杂的子句。

我们希望为高级用户提供编辑此语句的选项,但我们希望停止可以执行恶意代码的SQL注入攻击。我们不在乎他们是否想要放置1 = 1,我们真的关心他们试图突破调用更新/删除/存储过程等等。所以MS SQL中任何可以在where子句之后出现的都是公平的。< / p>

以下是用户可能想要输入的高级查询示例,规则生成器不会使用它的下拉菜单构建。

Where Org in (Select Org from AnotherTable Where Manager in (1,2,3)) AND ((Person= 4 OR Level = 5) AND Entity between 5 and 10 or Entity = 15)

有没有人可以想到的东西或免费?我已经看到一个很酷的规则构建器允许这个,但它超过2000美元。

1 个答案:

答案 0 :(得分:2)

您真的需要清理查询,还是只能以具有有限权限的用户身份执行查询,以便他们无法访问内部表或执行变更操作?如果您只想允许任意复杂的SELECT查询,那么调整权限可能就足够了。但是,根据您的环境,您可能仍需要考虑其他类型的攻击,例如重复“SELECT * FROM ReallyBigTable”作为DOS类型的攻击。<​​/ p>