Rails Brakeman SQL 访问 oracle 时注入警告 view/function

Rails Brakeman SQL injection warning while accessing an oracle view/function

我有 rails 代码正在使用 oracle view/function。 这是我的代码:

 def run_query
    connection.exec_query(
      "SELECT * FROM TABLE(FN_REQ(#{demo_type_param},#{demo_tid_param}}))")
  end

当 运行 Brakeman 分析器警告可能 "sql injection attack"

我需要了解这是否是有效警告,如果是,我该如何补救?

由于这是一个函数而不是实际的 table,我不确定什么是正确的方法。 如果它是一个普通模型,我会遵循这个模式:

Model.where("mycolumn1= ? AND mycolumn2= ?", demo_type_param, demo_tid_param).first

是的,这是真的。几乎每次,您通过简单地连接变量来构建 any SQL 查询时,您都容易受到 SQL 注入的攻击。通常,每次插入查询的数据看起来有效 SQL 时都会发生 SQL 注入,并可能导致执行其他查询。

唯一的解决方案是手动执行适当的转义或使用准备好的语句,后者是首选解决方案。

使用 ActiveRecord / Rails,您可以直接使用 exec_query 绑定

sql = 'SELECT * FROM TABLE(FN_REQ(?,?))'
connection.exec_query(sql, 'my query', [demo_type_param, demo_tid_param])

在这里,Rails 将在数据库上准备语句并在执行时向其添加参数,确保所有内容都正确转义并避免 SQL 注入。