【发布时间】:2009-12-06 15:18:26
【问题描述】:
我需要建立与 WHERE 子句一起使用的搜索条件。然后将此搜索条件传递给不同的应用程序,以作为 SQL 查询的一部分执行。因为那里的搜索条件可能相当复杂(包括子查询),我不相信接收应用程序可以智能地解析它们以防止 SQL 注入攻击。
最佳实践表明应使用参数化查询。当您使用命令对象自己执行查询时,效果很好。在我的情况下,我希望获得带有合并参数的查询字符串,并解析出我感兴趣的搜索子句。有没有办法做到这一点?
我使用 MS SQL Server,目前只需将所有单引号替换为我从调用方收到的字符串中的两个单引号。有没有更好的方法来实现对 SQL 注入攻击的某种程度的保护?
【问题讨论】:
-
如果你得到的字符串里已经有参数合并进去了,你怎么能“把所有的单引号都换成两个单引号”呢?这不会破坏像
WHERE name = 'KOTMATPOCKUH'这样的东西吗? -
@Heinzi 我要构建 WHERE,因此我得到了搜索值 KOTMATPOCKUH。但是,它也可能包含恶意代码。使用参数本来是理想的,但看起来我无法让 .NET 为我完成工作并将查询返回给我。
-
@KOTMATPOCKUH:谢谢,我现在明白了。 .net 将无法返回“合并”字符串,因为参数化查询是在 SQL Server 端解析的(即 .net 在单独的数据字段中发送字符串和参数)。
标签: c# .net sql sql-server sql-injection