报表运用作为一个 WEB 运用,同样会面临这样的风险

为理解决普通参数查询不灵巧,不自由的问题,很多报表工具开放了动态拼 SQL 的功能,许可 SQL 中进行子句更换,类似这样:

SELECT … FROM T WHERE ${w}

jsp中写sql不安全若何解决报表的 SQL 植入风险 NoSQL

w 便是可以根据用户需求随意拼的,比如 data>… AND date<=… AND area=…

这样查询就灵巧多了,但是风险也就来了,这个 w 就会有 SQL 注入的隐患,比如:

SELECT … FROM T WHERE 1=0 UNION SELECT … FROM user

这是一句可实行的合法 SQL,但 user 表中的信息就被透露了

怎么样办理这个问题呢?

1 只管即便利用普通的 SQL 参数,不要动态拼 SQL这样做,虽然灵巧度差一点,但安全有些报表工具不支持普通 SQL 参数,只供应拼 SQL 的方案,方便是方便了,但就要小心了

2 须要通用查询时,写繁芜一点的 SQL

比如:

SELECT … FROM T WHERE (${w})

SELECT … FROM T WHERE (${w}) OR ${w}

这样做有一定的效果,但是并不完美,有些时候也防不住,而且 SQL 繁芜后,会影响实行效率

3 再检讨关键字常日通用查询的条件不会有这些 select,from 等关键字,以是可以通过过滤这些关键字来戒备风险,不让参数中有这些关键字的 SQL 实行,虽然这样做有时候会失落去一些灵巧性,但是安全性却更高了

润乾报表把这些都做好了,直接用就可以了

我们就以润乾报表为例,来大略看一下实现步骤

1 在 XML 文件中配置关键字过滤

支配润乾报表后,在运用目录下找到 raqsoftConfig.xml 文件,配置敏感词列表

属性名:disallowedParamWordList,value 为禁用敏感词列表,多个之间用逗号分隔,英笔墨母不区分大小写

配置列表往后,如果访问的 URL 中再涌现敏感词,就会提示出错了,减少风险的发生

http://localhost:6868/demo/reportJsp/showReport.jsp?rpx=a.rpx&arg2= 华北 union select from users

2 已经做完了

是的就这么大略,在一个已经供应了防止 SQL 注入的工具中,便是这么轻松一步设置就可以规避风险了,以是选型的时候,多问问,看看各厂商是否能办理这问题,怎么办理的,否则就得自己去费劲去修补这个漏洞了

更详细的操作以及其他办理办法请参考: 报表的 SQL 植入风险及规避方法 - 乾学院