可能 sql 注入
Possible sql injection
我在我的项目中使用 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 注入攻击?我该如何解决?我试着做 sanitize(query)
但它只是添加了额外的引号集并且 SQL 语句没有正确生成
更新:
Squeel 会自动转义字符串,因此您的查询没有问题,不会让您遭受注入。参见 question about sql injection - Squeel - Github
旧(不正确)答案:
这是活动记录版本
如果我错了,请有人纠正我,但由于您将 #{query} 作为字符串而不是参数传递,那么您就在向注入敞开大门。参见 the docs for passing in arguments
使用参数将转义 'query' STRING
您的查询使用参数:
self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%"+?+"%"], query)}
我在我的项目中使用 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 注入攻击?我该如何解决?我试着做 sanitize(query)
但它只是添加了额外的引号集并且 SQL 语句没有正确生成
更新:
Squeel 会自动转义字符串,因此您的查询没有问题,不会让您遭受注入。参见 question about sql injection - Squeel - Github
旧(不正确)答案: 这是活动记录版本
如果我错了,请有人纠正我,但由于您将 #{query} 作为字符串而不是参数传递,那么您就在向注入敞开大门。参见 the docs for passing in arguments
使用参数将转义 'query' STRING
您的查询使用参数:
self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%"+?+"%"], query)}