配置过滤器filter对跨站脚本攻击XSS实现拦截

来源:互联网 发布:灰鸽子 2010 源码下载 编辑:程序博客网 时间:2024/05/10 15:55

1.web.xml中配置filter

[html] view plain copy
  1. <filter>  
  2.     <filter-name>XssFilter</filter-name>  
  3.     <filter-class>com.wk.util.XssFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>XssFilter</filter-name>  
  7.     <url-pattern>/*</url-pattern>  
  8. </filter-mapping>  

2.编写相应的filter的java类

[java] view plain copy
  1. package com.wk.util;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.Filter;  
  6. import javax.servlet.FilterChain;  
  7. import javax.servlet.FilterConfig;  
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.ServletRequest;  
  10. import javax.servlet.ServletResponse;  
  11. import javax.servlet.http.HttpServletRequest;  
  12.   
  13. public class XssFilter implements Filter {  
  14.   
  15.     @Override  
  16.     public void destroy() {  
  17.   
  18.     }  
  19.   
  20.     @Override  
  21.     public void doFilter(ServletRequest request, ServletResponse response,  
  22.             FilterChain chain) throws IOException, ServletException {  
  23.         chain.doFilter(new XssHttpServletRequestWraper(  
  24.                 (HttpServletRequest)request), response);//对request和response进行过滤  
  25.     }  
  26.   
  27.     @Override  
  28.     public void init(FilterConfig arg0) throws ServletException {  
  29.   
  30.     }  
  31.   
  32. }  
3.编写字符过滤类

[java] view plain copy
  1. package com.wk.util;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletRequestWrapper;  
  5. /** 
  6.  *  
  7.  * @author wk 
  8.  * @date 2015-8-6 
  9.  */  
  10. public class XssHttpServletRequestWraper extends HttpServletRequestWrapper {  
  11.   
  12.     public XssHttpServletRequestWraper(HttpServletRequest request) {  
  13.         super(request);  
  14.     }  
  15.   
  16.     @Override  
  17.     public String getParameter(String name) {  
  18.         return clearXss(super.getParameter(name));  
  19.     }  
  20.   
  21.     @Override  
  22.     public String getHeader(String name) {  
  23.         return clearXss(super.getHeader(name));  
  24.     }  
  25.   
  26.     @Override  
  27.     public String[] getParameterValues(String name) {  
  28.         String[] values = super.getParameterValues(name);  
  29.         if (values == null) {  
  30.             return null;  
  31.         }  
  32.         String[] newValues = new String[values.length];  
  33.   
  34.         for (int i = 0; i < values.length; i++) {  
  35.             newValues[i] = clearXss(values[i]);  
  36.         }  
  37.   
  38.         return newValues;  
  39.     }  
  40.   
  41.     /** 
  42.      * 处理字符转义 
  43.      *  
  44.      * @param value 
  45.      * @return 
  46.      */  
  47.     private String clearXss(String value) {  
  48.         if (value == null || "".equals(value)) {  
  49.             return value;  
  50.         }  
  51.         value = value.replaceAll("<""<").replaceAll(">"">");  
  52.         value = value.replaceAll("\\(""(").replace("\\)"")");  
  53.         value = value.replaceAll("'""'");  
  54.         value = value.replaceAll("eval\\((.*)\\)""");  
  55.         value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']",  
  56.                 "\"\"");  
  57.         value = value.replace("script""");  
  58.         return value;  
  59.     }  
  60.   
  61. }  


4.当然喽,此处多说一句,在装饰类中不仅可以拦截XSS脚本攻击,还可以将请求参数中的空格去掉,这样就不用在每一个action中都要去掉提交参数值的前后空格了,至于Injection Flows等sql注入的问题也可以一概解决了


转载:http://blog.csdn.net/woniumenga/article/details/47323829

0 0
原创粉丝点击