我正在使用 squeel gem在我的项目中,我有这样的代码:
def self.search(query)
return self.scoped if query.blank?
self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%#{query}%"])}
end
我的问题是这段代码容易受到 SQL 注入(inject)攻击吗?我该如何解决?我尝试执行 sanitize(query)
但它只是添加了额外的引号集并且没有正确生成 SQL 语句
最佳答案
更新:
Squeel 会自动转义字符串,因此您的查询没问题,不会让您遭受注入(inject)。参见 question about sql injection - Squeel - Github
旧(不正确)答案: 这是事件记录版本
如果我错了,请有人纠正我,但由于您将 #{query} 作为 STRING 而不是参数传递,那么您就在为注入(inject)敞开心扉。参见 the docs for passing in arguments
使用参数将转义'query' STRING
您使用参数的查询:
self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%"+?+"%"], query)}
关于sql - 可能的sql注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701722/