我正在使用此查询来查找id为2,5和6且附加参数为false的多个对象:
Reply.where(:event_id => [2, 5, 6], :looked_at => false)
这非常有效,但我认为它在SQL注入方面确实不安全。我如何将其重新格式化为更安全的查询?
我知道怎么用一个参数来做,但是一旦我传入一个数组就不再有用了。
答案 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()方法,必须手动应用。