我有使用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).first
发布于 2017-01-04 17:56:46
是的,这是真的。几乎每一次,从简单的连接变量构建任何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注入中正确地转义和保存所有内容。
https://stackoverflow.com/questions/41469164
复制相似问题