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).firs
t
是的,这是真的。几乎每次,您通过简单地连接变量来构建 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 注入。
我有 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).firs
t
是的,这是真的。几乎每次,您通过简单地连接变量来构建 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 注入。