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

本文介绍了一种常见的XSS防御代码实现中存在的问题,即单引号被错误地转义为“'”,而非标准的HTML转义方式。此问题源于网上广泛流传的XSS防御代码模板,该模板在实际应用中可能引入新的问题。

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

偶然间在向后台传递带单引号的参数值发现:单引号被转义成“& #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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值