2010-09-15 75 views
0

我有一個屏幕允許和最終用戶創建一個基本上任何有效的SQL片段的過濾器的要求。由於無法控制的原因,我需要在這個範圍內工作。Rails:允許免費的文本SQL過濾器,並仍然避免SQL注入

此sql片段被附加到sql語句中的where子句。目前爲了避免發生任何惡意的事情,運行sql的登錄名僅限於在所需表上選擇操作。

Rails(2.3)有什麼方法可以緩解sql注入攻擊的風險,但仍然允許自由文本輸入,因此可以指定非常複雜的過濾條件嗎?

乾杯

回答

1

添加第二個連接與否認與只讀訪問授予特定的數據庫和choosen表或視圖表的不敏感列中的所有訪問策略。如果引入單獨的模式,視圖名稱可以與表名稱相同。當然你的DBMS必須支持所有這些功能。一旦你做好了,DB就會照顧到所有的安全。

語法安全性很難保證 - 依賴於數據庫SQL語法特性(和錯誤),因爲數據庫有自己的sqlinjection技巧。另外,很難通過簡單的解析器正確地檢測出什麼是錯誤的,例如:[DELETE FROM],但[SELECT * FROM X WHERE name LIKE「%delete from our records%」] - 最後實現簡單的ala-SQL -DSL解析器並將AST轉換爲SQL,同時轉義非標記項目。但仍然非常複雜且具有風險。

+0

非常感謝謝謝 – user448157 2010-09-16 06:09:40