-1

我有一个简单的问题:

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

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

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

我知道如何用一个参数来做到这一点,但是一旦我传入一个数组,它就不再起作用了。

4

1 回答 1

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 字符和换行符。使用 Model.find(id) 或 Model.find_by_some thing(something) 会自动应用此对策。但在 SQL片段,尤其是在条件片段(where("..."))、connection.execute() 或 Model.find_by_sql() 方法中,必须手动应用。

于 2013-01-26T17:14:34.543 回答