加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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])

我现在收到以下错误:

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,绑定会以某种神奇的方式进行转换,你也必须传递一个名为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]}))"
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读