可能的sql注入
我在我的项目中使用的代码如下:可能的sql注入,sql,ruby,oracle,ruby-on-rails-3,squeel,Sql,Ruby,Oracle,Ruby On Rails 3,Squeel,我在我的项目中使用的代码如下: def self.search(query) return self.scoped if query.blank? self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%#{query}%"])} end 我的问题是,这段代码易受SQL注入攻击吗?我该如何修复它?我试图执行清理(查询),但它只是添加了一组额外的引号,并且SQL语句没有正确生成。更新: se
def self.search(query)
return self.scoped if query.blank?
self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%#{query}%"])}
end
我的问题是,这段代码易受SQL注入攻击吗?我该如何修复它?我试图执行清理(查询),但它只是添加了一组额外的引号,并且SQL语句没有正确生成。更新:
self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%"+?+"%"], query)}
squel将自动转义字符串,因此您的查询很好,不会打开注入。看
旧(不正确)答案:
这是活动记录版本
如果我错了,有人会纠正我,但是由于您将#{query}作为字符串而不是参数传递,那么您就打开了注入的大门。看
使用参数将转义“查询”字符串
使用参数的查询:
self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%"+?+"%"], query)}
这是续集吗?看起来它可能来自Squel gem:-请澄清,因为SQL注入的漏洞与否取决于哪个库。虽然我怀疑它不易受攻击,但大多数库都会小心地转义用于查询的参数。@NeilSlater你是对的,让我编辑这个问题,请随意回答,如果它是续集,我当然可以回答。但我没有设置ActiveRecord db,也不确定,尽管我怀疑您的代码没有漏洞。希望知道得更好的人能够更有信心地回答。