gpt4 book ai didi

sql - ruby on rails 为 oracle View /函数准备的语句

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:50 24 4
gpt4 key购买 nike

我有以下代码执行 oracle View ,如下所示:

def run_query
connection.exec_query(
"SELECT * FROM TABLE(FN_REQRESP(#{type_param},
#{search_type_param},
#{tid_param},
#{last_param},
#{key_param},
#{tran_id_param},
#{num_param},
#{start_date_param},
#{end_date_param}))")
end

上述查询的输出如下:

SELECT * FROM TABLE(FN_REQRESP('ALL',
'ALL_TRAN',
'100007',
'',
'',
'',
'',
TO_DATE('27-January-2017','dd-MON-yy'),
TO_DATE('31-January-2017','dd-MON-yy')))

问题是上述查询存在SQL注入(inject)漏洞。

因此,我尝试添加如下准备语句:

 connection.exec_query('SELECT * FROM TABLE(FN_REQRESP(?,?,?,?,?,?,?,?,?))','myquery',[type_param,search_type_param,tid_param,last_param,key_param,tran_id_param,num_param,start_date_param,end_date_param])

我现在收到以下错误:

NoMethodError: undefined method `type' for "'ALL'":String: SELECT * FROM TABLE(FN_REQRESP(?,?,?,?,?,?,?,?,?))

我相信是单引号搞砸了。有办法克服这个问题吗?

编辑:我尝试了 NDN 的答案和以下错误:

OCIError: ORA-00907: missing right parenthesis: SELECT * FROM TABLE(FN_REQRESP('\'ALL\'',
'\'ALL_TRAN\'',
'\'100007\'',
'\'\'',
'\'\'',
'\'\'',
'\'\'',
'TO_DATE(\'01-February-2017\',\'dd-MON-yy\')',
'TO_DATE(\'10-February-2017\',\'dd-MON-yy\')'))

最佳答案

查看the source , binds 以某种神奇的方式进行转换,您还必须传递一个命名的 prepare: true 参数。

它过去在 older versions 中也有不同的工作方式.


为了省去麻烦,您可以简单地使用#sanitize:

params = {
type: type_param,
search_type: search_type_param,
tid: tid_param,
last: last_param,
key: key_param,
tran_id: tran_id_param,
num: num_param,
start_date: start_date_param,
end_date: end_date_param,
}

params.each do |key, param|
params[key] = ActiveRecord::Base.sanitize(param)
end

connection.exec_query(
"SELECT * FROM TABLE(FN_REQRESP(#{params[:type]},
#{params[:search_type]},
#{params[:tid]},
#{params[:last]},
#{params[:key]},
#{params[:tran_id]},
#{params[:num]},
#{params[:start_date]},
#{params[:end_date]}))"
)

关于sql - ruby on rails 为 oracle View /函数准备的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41967721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com