2012-05-27 54 views
0

我有困難的時候試圖瞭解如何做以下事情:構建自定義條件動態地設置參數和運營商

我有一個JavaScript,可以幫助我dinamically建立一個過濾查詢,然後對其進行編碼併發送作爲鐵軌的參數。

過濾器是建立在這樣:myfilter = {"field": "birth_date", "comparison": "lt", "type": "date", "value": "2012-05-27"}}

所以我建,我的查找方法,條件散列動態設置。 最大的問題是,在這種情況下,即使通過查詢的字段名稱,我也可以進行SQL注入。你建議如何建立我的查找方法?

我願做這樣的事情:

Client.where("? ? ?",myfilter['field'],myfield['comparison'].to_operator,myfield['value']) 

但這是無效的。 我該如何實現這個保持我的查詢消毒?

+1

其實你只是在描述過濾器。根據表格元數據清理列名,針對某個列表對操作員進行清理(或者通過例如枚舉進行傳遞),然後照常進行處理。 –

+1

如果你把它作爲答案發布,我可以標記它,我確實按照你的建議做了 –

回答

1

您在客戶端上所做的所有操作都按照名稱,運算符和值來描述過濾器。這就是你如何在服務器端使用它們,這可能會讓你打開注入攻擊。

可以根據查詢中的列檢查ColumnName。運算符反對某種允許值的列表,或者可能通過枚舉傳遞。

像往常一樣值。

+0

非常感謝,運作良好^^ –