报表运用作为一个 WEB 运用,同样会面临这样的风险
为理解决普通参数查询不灵巧,不自由的问题,很多报表工具开放了动态拼 SQL 的功能,许可 SQL 中进行子句更换,类似这样:
SELECT … FROM T WHERE ${w}
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 植入风险及规避方法 - 乾学院