Struts2 2.3.15.1版本对参数处理存在问题

在Struts2从2.3.1升级到2.3.15.1后,页面向后台传递的部分参数丢失。通过调整params拦截器的acceptParamNames参数,允许出现.符号,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    前一段时间struts2爆出严重漏洞,因此需要将项目中struts2由2.3.1升级到2.3.15.1官方最新版本。在升级完成之后,发现原先运行正常的功能出问题了,页面向后台传递的部分参数丢失。通过跟踪struts2发现,负责处理页面参数ParametersInterceptor中默认参数过滤规则与2.3.1版本存在很大差异。

2.3.15.1版本: \w+((\.\w+)|(\[\d+\])|(\(\d+\))|(\['\w+'\])|(\('\w+'\)))*
2.3.1版本: [a-zA-Z0-9\\.\\]\\[\\(\\)_'\\s]+

因此像 map[user.id].value=1 这种格式的参数就会被过滤掉。为了解决这个问题,在params拦截器中,增加acceptParamNames参数,代码如下:

<interceptor-ref name="params">
    <param name="excludeParams">dojo\..*,^struts\..*</param>
    <param name="acceptParamNames">\w+((\.\w+)|(\[\d+\])|(\(\d+\))|(\['[a-z0-9A-Z_.]+'\])|(\('\w+'\)))*</param>
</interceptor-ref>

将原先倒数第二个\w+改为[a-z0-9A-Z_.]+,允许出现“.”符号,问题就解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值