可能 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)}