我想对我的Rails 4应用程序使用以下查询,但我担心SQL注入攻击:
@persons = People.where("persons.name LIKE ?", "%#{params[:search]}%")
有人能告诉我写上述陈述的安全方法吗?我尝试了以下但不确定它是否是防SQL注入:
search = "%" + params[:search] + "%"
@persons = People.where("persons.name LIKE ?", search)
谢谢!
答案 0 :(得分:9)
你的例子很好,正如zishe所说。
每当您对方法使用问号并将其他参数作为搜索查询传递时,它会对您的查询字符串进行清理。
手动执行字符串连接以创建查询时很危险,例如:
Project.where("name = '#{params[:name]}'")
答案 1 :(得分:6)
你的陈述都是安全的。你也可以这样写:
@persons = People.where("persons.name LIKE concat('%', ?, '%')", params[:search])