這是什麼讓來自用戶的字符串,並以查詢WHERE
語句中使用它的最好的和安全的方式。用戶查詢字符串
比方說,我有一個名爲DB模式,其中包含列c1
和c2
。我希望用戶能夠給我一個像str="c1: value1"
或str="c1: value1, c2: value2"
這樣的字符串,以便用它來執行查找(DB.find(str)
)。當然,我不希望他/她能夠執行SQL注入。有沒有一種優雅的方式?
這是什麼讓來自用戶的字符串,並以查詢WHERE
語句中使用它的最好的和安全的方式。用戶查詢字符串
比方說,我有一個名爲DB模式,其中包含列c1
和c2
。我希望用戶能夠給我一個像str="c1: value1"
或str="c1: value1, c2: value2"
這樣的字符串,以便用它來執行查找(DB.find(str)
)。當然,我不希望他/她能夠執行SQL注入。有沒有一種優雅的方式?
避免這裏最重要的是直接把用戶的響應轉換成一個where子句。所以不要做像DB.where這樣的東西(「c1 = value」)。相反,你可以依靠內置在SQL消毒軌道,通過執行類似
DB.where( 「C1 T =?」,value)的
的AR文檔是對這個真的清楚。 http://guides.rubyonrails.org/active_record_querying.html#pure-string-conditions
如果您字符串格式是固定的,那麼你可以將其轉換爲Hash
,然後可以將其應用到#where
條款。
string = "c1: value1, c2: value2"
hash = Hash[*string.split(/[,:]/).map(&:strip)]
DB.where(hash)
有沒有一種優雅的方法來檢查多次使用此方法相同的值?就像DB.where(「c1 t =?OR c2 t =?」,值,值)(不重複多次)。 – badnack
用sql no。還有其他方法。謝謝。 – dandlezzz