我们正在为我们的某个产品开发“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。
在这种情况下你应该注意什么?你会如何防范攻击呢?
- 基督徒
答案 0 :(得分:0)
答案 1 :(得分:0)
首先,我进行查询以从INFORMATION_SCHEMA.COLUMNS元数据表中获取所选表的字段。
从数据库中提取的列名称可以安全使用。然后我将SELECT子句中的字段与“安全字段列表”进行了比较。如果其中一个选定字段不在干净列表中,则将其删除或根本不运行生成的SQL。