2012-01-31 56 views
1

我們正在爲我們的一個產品開發「API」。這將允許用戶定義他們不想從他們的「查詢」返回的列,我們將構建所​​需的SQL。動態生成的SQL安全問題(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

創建一個存儲過程

這將讓你檢查輸入蜇傷,你應該是在安全方面。

參見: MSDN Create Stored Procedures

+0

存儲過程不是我們的選擇。它應該沒有我們需要修改專門爲這個API的數據庫。 另外你將如何創建一個SP,動態生成正確的SQL給定一組要返回的列? – 2012-01-31 11:00:21

0

首先,我做一個查詢來獲取從INFORMATION_SCHEMA.COLUMNS元數據表中選定表(S)的領域。

Querying database metadata

名從數據庫中抽取列使用是安全的。然後我將SELECT子句中的字段與「安全字段列表」進行了比較。如果其中一個選定字段不在乾淨列表中,則將其刪除或根本不運行生成的SQL。