动态生成的SQL安全问题(sql注入等)

时间:2012-01-31 07:52:18

标签: sql ado.net sql-injection

我们正在为我们的某个产品开发“API”。这将允许用户定义他们不会从他们的“查询”返回哪些列,我们将构建所​​需的SQL。

我知道您应该始终使用参数化查询来避免SQL注入攻击。但是,构建返回列的语句是否由用户定义时是否存在安全风险?让我们说我们有以下api请求。这只是一个例子来说明我的意思:))

/api/customers/getall?fields=Name,Phone,Email&where=Zip=1000

SQL将是

SELECT Name, Phone, Email FROM Customers WHERE Zip = @Zip

我不是只考虑使用fields参数并直接构建SQL,它可能会被制作成一个列表并返回一些默认列,如Id和Modified。

在这种情况下你应该注意什么?你会如何防范攻击呢?

- 基督徒

2 个答案:

答案 0 :(得分:0)

创建存储过程

这将让你检查输入Stings,你应该是安全的。

请参阅: MSDN Create Stored Procedures

答案 1 :(得分:0)

首先,我进行查询以从INFORMATION_SCHEMA.COLUMNS元数据表中获取所选表的字段。

Querying database metadata

从数据库中提取的列名称可以安全使用。然后我将SELECT子句中的字段与“安全字段列表”进行了比较。如果其中一个选定字段不在干净列表中,则将其删除或根本不运行生成的SQL。