java后台接收参数特殊字符被转义多出空格问题
偶然间在向后台传递带单引号的参数值发现:单引号被转义成“& #39;”,不是正常的html符号转义,⽽是“&”后⾯多了⼀个空格,导致⽆法再被反转义。
后追踪代码发现项⽬中做了防XSS攻击处理导致的,代码如下:
private String cleanXSS(String value) {
//You'll need to remove the spaces from the html entities below
value = placeAll("<", "& lt;").replaceAll(">", "& gt;");
value = placeAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
value = placeAll("'", "& #39;");
value = placeAll("eval\\((.*)\\)", "");
value = placeAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
value = placeAll("script", "");
return value;
}
这段代码在⽹上的防XSS攻击⽂章⾥基本都⼀模⼀样,那么多⽂章连注释都不带变的。。。注释上貌似是说让去掉空格的吧,这么多⼈没改,搞的我也不敢确认这个注释是不是这个意思了。
这个情况在使⽤Guns的时候也有,在guns-base的pom⽂件中引⼊的kernel-core下
ss.XssHttpServletRequestWrapper类,这⾥⽆法去掉的话只能⾃⼰再重写覆盖了。
<!--核⼼组件-->
<dependency>
replaceall()
<groupId>ses</groupId>
<artifactId>kernel-core</artifactId>
</dependency>
<dependency>
<groupId>ses</groupId>
<artifactId>kernel-validator</artifactId>
</dependency>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。