从用户那里获取字符串并在查询的WHERE
语句中使用它的最佳和最安全的方法是什么。
我们说我有一个名为DB的模型,其中包含c1
和c2
列。我希望用户能够为我提供str="c1: value1"
或str="c1: value1, c2: value2"
这样的字符串,以便使用它来执行查找(DB.find(str)
)。当然,我不希望他/她能够执行 SQL注入。有优雅的方式吗?
答案 0 :(得分:3)
这里要避免的最重要的事情是将用户响应直接放入where子句中。所以不要做像DB.where(“c1 = value”)这样的事情。相反,您可以通过执行类似
的操作来依赖sql清理中构建的railsDB.where(“c1 t =?”,value)
AR文档对此非常清楚。 http://guides.rubyonrails.org/active_record_querying.html#pure-string-conditions
答案 1 :(得分:0)
如果修复了字符串格式,则可以将其转换为Hash
,然后将其应用于#where
子句。
string = "c1: value1, c2: value2"
hash = Hash[*string.split(/[,:]/).map(&:strip)]
DB.where(hash)