Rails 4 - 在SQL查询中使用LIKE运算符防止SQL注入

时间:2014-08-21 00:46:41

标签: ruby-on-rails-4 sql-injection params sql-like

我想对我的Rails 4应用程序使用以下查询,但我担心SQL注入攻击:

@persons = People.where("persons.name LIKE ?", "%#{params[:search]}%")

有人能告诉我写上述陈述的安全方法吗?我尝试了以下但不确定它是否是防SQL注入:

search = "%" + params[:search] + "%"
@persons = People.where("persons.name LIKE ?", search)

谢谢!

2 个答案:

答案 0 :(得分:9)

你的例子很好,正如zishe所说。

每当您对方法使用问号并将其他参数作为搜索查询传递时,它会对您的查询字符串进行清理。

手动执行字符串连接以创建查询时很危险,例如:

Project.where("name = '#{params[:name]}'")

Click here for more information

答案 1 :(得分:6)

你的陈述都是安全的。你也可以这样写:

@persons = People.where("persons.name LIKE concat('%', ?, '%')", params[:search])

Simlilar qestion