像查询一样安全的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]}%"])