2014-11-13 79 views
3

這是什麼讓來自用戶的字符串,並以查詢WHERE語句中使用它的最好的和安全的方式。用戶查詢字符串

比方說,我有一個名爲DB模式,其中包含列c1c2。我希望用戶能夠給我一個像str="c1: value1"str="c1: value1, c2: value2"這樣的字符串,以便用它來執行查找(DB.find(str))。當然,我不希望他/她能夠執行SQL注入。有沒有一種優雅的方式?

回答

3

避免這裏最重要的是直接把用戶的響應轉換成一個where子句。所以不要做像DB.where這樣的東西(「c1 = value」)。相反,你可以依靠內置在SQL消毒軌道,通過執行類似

DB.where( 「C1 T =?」,value)的

的AR文檔是對這個真的清楚。 http://guides.rubyonrails.org/active_record_querying.html#pure-string-conditions

+0

有沒有一種優雅的方法來檢查多次使用此方法相同的值?就像DB.where(「c1 t =?OR c2 t =?」,值,值)(不重複多次)。 – badnack

+0

用sql no。還有其他方法。謝謝。 – dandlezzz

0

如果您字符串格式是固定的,那麼你可以將其轉換爲Hash,然後可以將其應用到#where條款。

string = "c1: value1, c2: value2" 
hash = Hash[*string.split(/[,:]/).map(&:strip)] 
DB.where(hash)