Struts2 OGNL表达式注入漏洞解决

Struts2 OGNL表达式注入漏洞解决

线上项目使用Struts2 版本2.3,需要升级版本,记录解决步骤,不确保其它项目都可以

  1. pom.xml
<struts.version>2.5.30</struts.version>
<!-- struts相关库 -->
<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-core</artifactId>
	<version>${struts.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-config-browser-plugin</artifactId>
	<version>${struts.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-spring-plugin</artifactId>
	<version>${struts.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-json-plugin</artifactId>
	<version>${struts.version}</version>
</dependency>
  1. web.xml
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
替换成
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  1. struts.xml
    2.1 > 2.5
    package
    添加 strict-method-invocation=“false” 属性
    添加 global-allowed-methods
    如下
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
        替换成
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
<package name="root" extends="default" namespace="/" strict-method-invocation="false">
	<default-interceptor-ref name="myStack" />
	<global-allowed-methods>regex:.*</global-allowed-methods>
</package>
  1. 拦截器 参数处理
Map<String, Object> parameters = invocation.getInvocationContext().getParameters();
ActionContext ac = invocation.getInvocationContext();
ValueStack stack = ac.getValueStack();
for (Map.Entry<String, Object> map : parameters.entrySet()) {
    Object[] obj = (Object[]) map.getValue();// 获取传入的参数值是否有非法,xss攻击
    stack.setValue(map.getKey(), xssEncode(obj[0].toString()));
}

修改为

HttpParameters parameters = invocation.getInvocationContext().getParameters();
ActionContext ac = invocation.getInvocationContext();
ValueStack stack = ac.getValueStack();
for (Map.Entry<String, Parameter> map : parameters.entrySet()) {
    Parameter obj = map.getValue();// 获取传入的参数值是否有非法,xss攻击
    stack.setValue(map.getKey(), xssEncode(obj.getValue()));
}

编译部署,启动成功

补充
网址访问存在 https 访问变为 http
需要再tomcat server.xml中 修改这一部分

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" 
URIEncoding="UTF-8"  secure="true" scheme="https" proxyPort="443"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值