`

关于struts2.3.4项目跨站执行脚本以及远程执行漏洞修复概要

阅读更多
因为近期负责的几个银行系统软件,需要交付客户,因此客户专门请了安全公司对系统进行了安全评测,结果发现了诸如跨站执行脚本,远程执行漏洞以及弱口令等问题。
下面记录下本次解决的过程以便后续
1、首先从最简单的开始处理,服务器的弱口令问题,首先根据安全工具提供的测试描述中发现应用服务器中存在一个匿名用户,默认是不需要密码的,经过分析发现服务器使用了FTP协议,
而使用ftp协议默认会产生一个匿名用户,因此解决方案是删除该匿名用户。
2、再次就是解决跨站执行脚本的漏洞,首先在网上各种资料查找,彻底的了解了什么是跨站脚本漏洞以及产生的原因,也终于明白了为什么我们的项目会存在问题,主要是在JSP中存在直接将输入内容回显到页面中,并且未对输入内容做任何检查。
知道问题原因当然就开始修改了,鉴于对安全这块了解不深,自己写的过滤器也非常简单,仅能过滤一些情况还是会存在风险,因此在网上找了一个专门安全大拿写的针对java过滤xss的处理类(xss-html-filter-xss-html-filter-1.5)。有了这个利器
就开始将它融入到我们系统中了,因为目前系统已经处理交付阶段,不便于一个类一个类进行调整,因此预想统一使用了过滤器过滤输入内容。当然这里有遇到一些问题
因为HttpServletRequest类中没有提供重新设置paramter值的方法(项目中多使用getParamter获取参数),所以想到了使用装饰模式,即封装getParamter方法(其实getAttribute等一些方法也封装了;ps:只针对String类型处理),在返回值时过滤输入值,这里继承了httpservletrequestwrapper类,
然后再注册一个filter,经过验证确实达到了过滤输入字符串的目的。
3、最后解决的是远程漏洞执行,这个主要是因为项目本身使用了struts2,并且版本是比较低的2.3.4,网上很多都有描述低版本的存在风险,因此从官网下载了最新的2.3.24,然后就是各种替换jar包。
替换完后启动项目又发现报错,说需要使用新的filter,原来老的FilterDispatch已经建议不使用了,struts2建议使用新的StrutsPrepareAndExecuteFilter。配置上最新的filter类后启动没有问题呢,但是
有报错“There is no Action mapped for namespace[/] and action name [login] associated with context path [/login]”,解决此问题只需要通过在struts.xml根节点中添加如下节点<constant name="struts.enable.DynamicMethodInvocation" value="true"/><constant name="struts.convention.action.mapallmatches" value="true" />
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics