struts漏洞S2-016被扫描出,要求升级struts版本,查看生产struts版本2.0.12,该漏洞影响版本2.3.15以下,上网搜索,struts2.5以上的要求jdk1.7,由于项目过老,本地编译不通过,最终采取生产直接替换jar包改配置方式。
1.替换jar包,先把struts核心包替换掉,再找struts开头的对应的jar,可以启动看报错,缺啥补啥。
注意删除 xwork包,它已经整合到struts2-core当中了!!
2.修改struts.xml
(1)修改头部为2.5.dtd
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
(2)增加配置。讲action设置为动态访问
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
(3)package后边添加 strict-method-invocation="false"
<package name="xx" namespace="/" extends="struts-default" strict-method-invocation="false">
3.修改web.xml,在2.5版本的struts2-core中没有了ng包,所以StrutsPrepareAndExecuteFilter类的路径需要修改。
将 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
替换成<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
4.在classpath下新增log4j2.xml,配置如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration status="error"> <appenders> </appenders> <loggers> <root level="info"> </root> </loggers> </configuration>
升级注意事项:
不要删掉log4j-1.2.14.jar,否则会报错误
这种升级方式避免了老项目编译不通过问题
附录:struts核心包作用
commons-fileupload-1.3.3:上传文件
commons-io-2.5:对本地文件、流进行操作
commons-lang3-3.6:基础文件包
commons-logging-1.1.3:日志包
freemarker-2.3.23:生成各种文本:html、xml、rtf、java源代码等
javassist-3.20.0-GA:使java字节码操控更加简便,是一个编译java字节码的类库,提高效率
log4j-api-2.8.2:日志
ognl-3.1.15:struts2独有的标签库
struts2-core-2.5.13:struts2的核心包