【发布时间】:2011-05-13 20:43:15
【问题描述】:
在 ADO.NET 中,您可以将参数添加到命令对象以安全地将用户输入添加到 SQL 查询。 SQL 查询常见的其他谓词的等价物是什么?
我正在编写一个程序,该程序本质上是一个非常有限的 O-R 映射器和 SQL 生成器(它主要关注具有元信息的数据库和符合该元数据的其他数据库)。因此,我需要能够调用以下内容:
string sql = "select " + USER_SELECTED_COLUMNS +
" from " + USER_SELECTED_TABLE +
" where " + USER_CRITERIA;
其中一些(如criteria)是由受信任的用户(我公司的其他开发人员)按字面意思输入到我的程序中的,而其他数据是由不受信任的用户(客户)通过他们的搜索等方式输入到我的程序中的。
我想让这个程序安全,但我知道上述内容并非如此。目前我已将 USER_SELECTED_COLUMNS 替换为命令参数,但我无法找到 CRITERIA 和 TABLEs 的等效项。 (或按列排序)。是否有任何类似于 SqlParameter 的 ADO.NET 功能可用于非选择谓词?
【问题讨论】:
-
这是一场 SQL 注入的噩梦,请谨慎行事,并在您的应用上完成一次体面的渗透测试。
-
是的,我知道。因此问题。另一方面,我们的客户已经使用该系统的 100% 易受注入攻击版本 16 年了。这就是企业与客户关系的美妙之处。但是:因为我将它从 VB6/ADO 迁移到 C#/ADO.NET,所以我认为额外的安全性不会受到伤害。
标签: c# sql ado.net sql-injection database-security