Rails Brakeman SQL 注入警告,同时访问 oracle 视图/函数



我有使用oracle视图/函数的rails代码。这是我的代码:

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

当运行Brakeman分析仪时,它会警告可能的"sql注入攻击"

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

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

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

是的,这是真实的。几乎每次通过简单地连接变量构建任何 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 注入中保存。

相关内容

  • 没有找到相关文章

最新更新