我习惯使用PHP和准备好的语句,现在当我从rails(因为我是一个新的rails和不确定的语法和东西)看下面的代码段,我想知道代码是否容易SQLI注入
代码片段(控制器),参数q是搜索框的值:
def index
query = %w(% %).join params[:q].to_s.gsub('%', '\%').gsub('_', '\_')
@posts = Post.where("name LIKE ? OR body LIKE ?", query, query).order(params[:order])
end
谢谢
你所拥有的都是为了安全。如果不是,那么这是Rails中的一个bug。
.where
接受多种格式的条件。一个是原始字符串。如果你自己构建这个字符串,所有的赌注都是无效的,你是脆弱的。
正如最近的一些文档所说:
注意,从用户输入构建自己的字符串可能会暴露你的应用于注入攻击如果处理不当。作为一个另外,建议使用以下方法之一:
换句话说,所有"以下"(所有其他支持的方式)的做事方式都是可以的。
所以如果你在.where
中使用字符串参数以外的任何参数,你应该没问题
只要你不插入你的where
子句,它应该是安全的。这里有一些很好的SQL注入代码示例