Content

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

文章摘要

这篇文章介绍了一个名为`XssHttpServletRequestWrapper`的Java类,用于在`HttpServletRequest`对象中实现跨站脚本(XSS)防护功能。该类的主要目的是通过替换关键字符来防止潜在的恶意脚本构造。文章详细描述了类的结构和功能,包括: 1. **核心功能**:通过`getParameter`和`getHeader`方法对请求参数和头信息进行编码处理。 2. **编码方法**:使用`xssEncode`方法将特定字符替换为全角字符,例如`>`替换为“>”,`<`替换为“<”等。 3. **用途说明**:类中包含获取原始请求对象的方法,以便在需要原始请求时可以恢复。 文章简要总结了该类的作用和实现细节,突出了其在防止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; } }