URL传参问题。带中文SQL段无法作为参数传递给模板

URL为:



http://10.131.128.7:8080/WebReport/ReportServer?reportlet=PR%5B6c47%5D%5B603b%5D%5B8868%5D.cpt&qxcs=%2520and%25201%2520%253D%25201%2520%2520%2520and%2520exists%2520(select%2520budgetnum%2520from%2520uf_budgetnoconf%2520where%2520budgetnum%2520%253D%2520substr(%25E9%25A2%2584%25E7%25AE%2597%25E7%25BC%2596%25E7%25A0%2581%252C0%252C5))


参数为

%2520and%25201%2520%253D%25201%2520%2520%2520and%2520exists%2520(select%2520budgetnum%2520from%2520uf_budgetnoconf%2520where%2520budgetnum%2520%253D%2520substr(%25E9%25A2%2584%25E7%25AE%2597%25E7%25BC%2596%25E7%25A0%2581%252C0%252C5))

 and 1 = 1   and exists (select budgetnum from uf_budgetnoconf where budgetnum = substr(预算编码,0,5))

这段sql经过两次encodeURIComponent得来的


有这段参数无法打开模板,把这个参数值改成1可以成功打开,证明模板应该没有问题,请教大神这个参数有什么问题?如何传递带中文的sql段给模板?



个人发现,

好像%2520和and不能连着传,以出现%2520and就会报错

有没有大神知道这个现象的解决办法?


FineReport qyi 发布于 2018-11-9 16:02 (编辑于 2018-11-12 09:05)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
macro_hardLv1高级互助
发布于2018-11-12 09:17

有SQL防注入,应该不能这样传吧

  • qyi qyi(提问者) sql注入已经是关闭状态了呀
    2018-11-12 10:09 
  • macro_hard macro_hard 回复 qyi(提问者) 为什么要把sql语句作为参数传递呢,这样表结构都暴露出来了。为什么不传递id作为参数,不同的id对应不同的sql语句
    2018-11-12 11:26 
最佳回答
0
孤陌Lv6资深互助
发布于2018-11-9 16:07(编辑于 2018-11-9 16:31)

Web传递中文参数-http://help.finereport.com/doc-view-916.html 看看这个

window.location="http://localhost:8075/webroot/decision/view/report?viewlet=doc/Parameter/DynamicCol/DynamicCol.cpt&col="+FR.cjkEncode("中文名称")

  • qyi qyi(提问者) 这套帆软是独立部署的,没有集成部署,而且我看帮助文档其实两次encodeURIComponent就可以了。我也是这么做的,但是还是不行的
    2018-11-09 16:28 
  • 孤陌 孤陌 回复 qyi(提问者) URL给参数传递中文值-http://help.finereport.com/doc-view-1137.html 看这个
    2018-11-09 16:30 
  • qyi qyi(提问者) 回复 孤陌 这个方法也是集成部署才能用的呢。还有一个文档,标题是URL传递特殊符号,我按那个来的
    2018-11-09 16:32 
  • 孤陌 孤陌 回复 qyi(提问者) 可以用的 转码就好了
    2018-11-09 16:39 
  • qyi qyi(提问者) 回复 孤陌 独立部署的话JSP里面没办法用FR.cjkEncode()方法呀。这个方法不是帆软内部的方法么?按照两次encodeURIComponent转码的方式得到的参数会有问题,具体参数在问题中描述了。您可以试下。感谢!
    2018-11-09 17:09 
最佳回答
0
flyingsnakeLv6资深互助
发布于2018-11-9 17:35

刚回答了一次居奇迹般的消失了...



我个人认为,这个需求,应该建立一个临时表.

以uuid做主键,把对应的sql文存到临时表中.

之后,只传参uuid

到接参的报表中.通过uuid把sql文查询出来


优点:

避免暴露sql文\避免url过长的尴尬.

  • qyi qyi(提问者) 我这个本身就是一部分SQL,如果把这一部分放入了数据库,那么整体的SQL没办法写了吧
    2018-11-12 10:09 
  • flyingsnake flyingsnake 回复 qyi(提问者) 一样的 只是字符型的拼接罢了
    2018-11-12 11:05 
  • 4关注人数
  • 1215浏览人数
  • 最后回答于:2018-11-12 09:17
    请选择关闭问题的原因
    确定 取消
    返回顶部