Rails:“Where” - 具有多个参数的功能 - 安全格式化

时间:2013-01-26 16:41:58

标签: ruby-on-rails rails-activerecord

我认为我有一个简单的问题:

我正在使用此查询来查找id为2,5和6且附加参数为false的多个对象:

Reply.where(:event_id => [2, 5, 6], :looked_at => false)

这非常有效,但我认为它在SQL注入方面确实不安全。我如何将其重新格式化为更安全的查询?

我知道怎么用一个参数来做,但是一旦我传入一个数组就不再有用了。

1 个答案:

答案 0 :(得分:1)

Reply.where(:event_id => untrusted_array, :looked_at => false)是安全的。 Reply.where("event_id IN (#{untrusted_array.join(','}) AND looked_at = FALSE")不安全

  

Ruby on Rails有一个特殊SQL字符的内置过滤器   将转义',',NULL字符和换行符。使用   自动模拟.find(id)或Model.find_by_some事物(某事物)   适用这种对策。但在SQL片段中,特别是在   条件片段(其中(“...”)),connection.execute()或   Model.find_by_sql()方法,必须手动应用。