JSP使用过滤器防止Xss漏洞(filter拦截jsp)干货分享

随心笔谈3年前发布 admin
211 0 0

文章摘要

这篇文章介绍了如何通过XSS(跨站脚本)过滤来保护HttpServletRequest对象。文章主要围绕一个Java类`XssHttpServletRequestWrapper`,该类继承自`HttpServletRequestWrapper`并增加了对参数和头部的过滤功能。核心内容包括: 1. 该类通过自定义方法`xssEncode`对输入的字符串进行编码,将特殊字符(如`>`、`<`、`'`、`"`、`&`、`\`、`#`等)分别替换为全角字符,以防止恶意脚本执行。 2. `getParameter`和`getHeader`方法在获取 HttpServletRequest对象的参数和头部时,会先对参数名进行编码,确保返回值不可被直接利用。 3. `getOrgRequest`方法用于返回原始的HttpServletRequest对象,适用于需要保留原始请求上下文的情况。 4. 该实现通过编码机制实现了对 HttpServletRequest对象的过滤,从而防止跨站脚本攻击,保障服务器安全。 文章详细描述了类的实现细节和过滤机制,强调了对特殊字符的处理方法及其在防止XSS攻击中的作用。


package filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
HttpServletRequest orgRequest=null;

public XssHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
orgRequest=request;
}

@Override
public String getParameter(String name) {
String value=super.getParameter(xssEncode(name));
if (value !=null) {
value=xssEncode(value);
}
return value;
}

@Override
public String getHeader(String name) {

String value=super.getHeader(xssEncode(name));
if (value !=null) {
value=xssEncode(value);
}
return value;
}

private static String xssEncode(String s) {
if (s==null || s.isEmpty()) {
return s;
}
StringBuilder sb=new StringBuilder(s.length() + 16);
for (int i=0; i < s.length(); i++) {
char c=s.charAt(i);
switch (c) {
case ‘>’:
sb.append(‘>’);//全角大于号
break;
case ‘<‘:
sb.append(‘<’);//全角小于号
break;
case ‘\”:
sb.append(‘‘’);//全角单引号
break;
case ‘”‘:
sb.append(‘“’);//全角双引号
break;
case ‘&’:
sb.append(‘&’);//全角
break;
case ‘\\’:
sb.append(‘\’);//全角斜线
break;
case ‘#’:
sb.append(‘#’);//全角井号
break;
default:
sb.append(c);
break;
}
}
return sb.toString();
}

public HttpServletRequest getOrgRequest() {
return orgRequest;
}

public static HttpServletRequest getOrgRequest(HttpServletRequest req) {
if(req instanceof XssHttpServletRequestWrapper){
return ((XssHttpServletRequestWrapper)req).getOrgRequest();
}

return req;
}
}

© 版权声明

相关文章