像查询一样安全的ActiveRecord

我试图写LIKE查询。

我读纯stringquires是不安全的,但是我找不到任何解释如何编写安全的LIKE哈希查询的文档。

可能吗? 我应该手动防御SQL注入?

为确保您的查询string得到正确的清理,请使用数组或哈希查询语法来描述您的条件:

Foo.where("bar LIKE ?", "%#{query}%") 

要么:

 Foo.where("bar LIKE :query", query: "%#{query}%") 

如果query可能包含%字符,那么您需要首先使用sanitize_sql_like来清理query

 Foo.where("bar LIKE ?", "%#{sanitize_sql_like(query)}%") Foo.where("bar LIKE :query", query: "%#{sanitize_sql_like(query)}%") 

使用Arel,您可以执行这个安全且便携的查询:

 title = Model.arel_table[:title] Model.where(title.matches("%#{query}%")) 

对于PostgreSQL将是

 Foo.where("bar ILIKE ?", "%#{query}%") 

你可以做

 MyModel.where(["title LIKE ?", "%#{params[:query]}%"])