我试着写得像查询一样。
我读到纯粹的字符串测试不安全,但是我找不到任何文档来解释如何像Hash查询那样安全地编写。
有可能吗?我应该手动防御SQL注入吗?
发布于 2014-09-29 07:27:36
要确保查询字符串得到正确的清理,请使用数组或哈希查询语法来描述您的条件:
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)}%")发布于 2017-01-02 14:08:49
使用Arel,您可以执行这个安全和可移植的查询:
title = Model.arel_table[:title]
Model.where(title.matches("%#{query}%"))发布于 2015-12-06 15:31:20
对于PostgreSQL来说,它将是
Foo.where("bar ILIKE ?", "%#{query}%") https://stackoverflow.com/questions/26094430
复制相似问题