Rails中的用户查询字符串

时间:2014-11-13 17:37:14

标签: sql ruby-on-rails ruby-on-rails-4

从用户那里获取字符串并在查询的WHERE语句中使用它的最佳和最安全的方法是什么。

我们说我有一个名为DB的模型,其中包含c1c2列。我希望用户能够为我提供str="c1: value1"str="c1: value1, c2: value2"这样的字符串,以便使用它来执行查找(DB.find(str))。当然,我不希望他/她能够执行 SQL注入。有优雅的方式吗?

2 个答案:

答案 0 :(得分:3)

这里要避免的最重要的事情是将用户响应直接放入where子句中。所以不要做像DB.where(“c1 = value”)这样的事情。相反,您可以通过执行类似

的操作来依赖sql清理中构建的rails

DB.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)