xssProject在java web项目中应用
2015-12-01 15:51
435 查看
注:转载http://337027773.blog.163.com/blog/static/54376980201451133534157/
1.项目引入xssProtect-0.1.jar、antlr-3.0.1.jar、antlr-runtime-3.0.1.jar包
2.封装request
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { HttpServletRequest orgRequest = null; public XssHttpServletRequestWrapper(HttpServletRequest request) { super(request); orgRequest = request; } /** * 覆盖getParameter方法,将参数名和参数值都做xss过滤。<br/> * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取<br/> * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖 */ @Override public String getParameter(String name) { String value = super.getParameter(xssEncode(name)); if (value != null) { value = xssEncode(value); } return value; } /** * 覆盖getHeader方法,将参数名和参数值都做xss过滤。<br/> * 如果需要获得原始的值,则通过super.getHeaders(name)来获取<br/> getHeaderNames 也可能需要覆盖 */ @Override public String getHeader(String name) { String value = super.getHeader(xssEncode(name)); if (value != null) { value = xssEncode(value); } return value; } /** * 将容易引起xss漏洞的半角字符直接替换成全角字符 * * @param s * @return */ private static String xssEncode(String s) { if (s == null || s.isEmpty()) { return s; } StringReader reader = new StringReader( s ); StringWriter writer = new StringWriter(); try { HTMLParser.process( reader, writer, new XSSFilter(), true ); return writer.toString(); } catch (NullPointerException e) { return s; } catch(Exception ex) { ex.printStackTrace(); } return null; } /** * 获取最原始的request * * @return */ public HttpServletRequest getOrgRequest() { return orgRequest; } /** * 获取最原始的request的静态方法 * * @return */ public static HttpServletRequest getOrgRequest(HttpServletRequest req) { if (req instanceof XssHttpServletRequestWrapper) { return ((XssHttpServletRequestWrapper) req).getOrgRequest(); } return req; }
3.创建过滤器
XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request); chain.doFilter(xssRequest, response);
4.在web.xml中配置过滤器
https://xssprotect.googlecode.com/svn/trunk/
相关文章推荐
- java有车有房有能力最基本运用
- ssh 分页struts2+hibernate3+spring 分页
- 从头认识java-11.3 格式化输出(1)
- javaSE(17)(打印流、转换流、对象流、配置文件和递归)
- eclipse手动导入dtd文件
- struts国际化
- spring初始化
- Java并发编程系列之三:重排序与顺序一致性
- 使用eclipse构建Maven项目及发布一个Maven项目
- java设计模式----组合模式
- Spring-Struts2两大框架整合过程介绍(基于注解方式)
- Java代理模式
- Java工厂模式
- Eclipse @override报错解决
- java中String的常用方法
- Java输出一个时间段内时间和星期对应关系
- 整理java读书笔记十五之java中的内部类
- java学习笔记-设计模式1(简介)
- java 浮点类型的四舍五入
- Java读书笔记十六(Java中的枚举类)