java后台接收参数特殊字符被转义多出空格问题

偶然间在向后台传递带单引号的参数值发现:单引号被转义成“& #39;”,不是正常的html符号转义,而是“&”后面多了一个空格,导致无法再被反转义。

后追踪代码发现项目中做了防XSS攻击处理导致的,代码如下:

private String cleanXSS(String value) {

        //You'll need to remove the spaces from the html entities below

        value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");

        value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");

        value = value.replaceAll("'", "& #39;");

        value = value.replaceAll("eval\\((.*)\\)", "");

        value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");

        value = value.replaceAll("script", "");

        return value;

    }

这段代码在网上的防XSS攻击文章里基本都一模一样,那么多文章连注释都不带变的。。。注释上貌似是说让去掉空格的吧,这么多人没改,搞的我也不敢确认这个注释是不是这个意思了。

这个情况在使用Guns的时候也有,在guns-base的pom文件中引入的kernel-core下cn.stylefeng.roses.core.xss.XssHttpServletRequestWrapper类,这里无法去掉的话只能自己再重写覆盖了。

<!--核心组件-->
        <dependency>
            <groupId>cn.stylefeng.roses</groupId>
            <artifactId>kernel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.stylefeng.roses</groupId>
            <artifactId>kernel-validator</artifactId>
        </dependency>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值