sql – ruby?? on rails为oracle视图/函数准备语句
发布时间:2020-12-12 06:35:25 所属栏目:MsSql教程 来源:网络整理
导读:我有以下代码执行oracle视图,如下所示: 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_da
我有以下代码执行oracle视图,如下所示:
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注入漏洞. 所以,我试着添加一个prepare语句如下: 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]) 我现在收到以下错误:
这是单引号搞砸了我相信.有办法克服这个问题吗? 编辑: 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,绑定会以某种神奇的方式进行转换,你也必须传递一个名为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]}))" ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |