sql - 可能的sql注入(inject)

标签 sql ruby oracle ruby-on-rails-3 squeel

我正在使用 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/

相关文章:

sql - 插入所有输入项组合的最佳方法

ruby - 事实文件已解析但返回空数据集

oracle - 内部错误 : Image is a collection image, 期望使用 Oracle 进行 ADT

oracle - 由于oracle没有像MySQL一样提供 "limit"和 "offset"函数,Spring Data JPA如何实现与oracle数据库的分页?

java - 了解 Spring JPA 底层原生查询

mysql - 具有相同参数的格式相同的查询在MySQL 8.0中具有完全不同的执行时间

ruby - 从 Addressable 对象中获取完整的 URI?

sql - 添加到游标内的表

sql - 获取最新数据到周期时间戳

ruby-on-rails - 如何在 Rails Controller 中使用闭包?