java 过滤器filter防sql注入

来源:互联网 发布:非线性最优化基础 编辑:程序博客网 时间:2024/05/16 18:33

转自:http://blog.csdn.net/xb12369/article/details/22921629

XSSFilter.java

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public void doFilter(ServletRequest servletrequest,  
  2.             ServletResponse servletresponse, FilterChain filterchain)  
  3.             throws IOException, ServletException {  
  4.           
  5.   
  6.         //flag = true 只做URL验证; flag = false 做所有字段的验证;  
  7.         boolean flag = true;  
  8.         if(flag){  
  9.             //只对URL做xss校验  
  10.             HttpServletRequest httpServletRequest = (HttpServletRequest) servletrequest;  
  11.             HttpServletResponse httpServletResponse = (HttpServletResponse) servletresponse;  
  12.               
  13.             String requesturi = httpServletRequest.getRequestURL().toString();  
  14.             requesturi = URLDecoder.decode(requesturi, "UTF-8");  
  15.             if(requesturi!=null&&requesturi.indexOf("alipay_hotel_book_return.html")!=-1){  
  16.                 filterchain.doFilter(servletrequest, servletresponse);  
  17.                 return;  
  18.             }  
  19.             if(requesturi!=null&&requesturi.indexOf("account_bank_return.html")!=-1){  
  20.                 filterchain.doFilter(servletrequest, servletresponse);  
  21.                 return;  
  22.             }  
  23.             if(requesturi!=null&&requesturi.indexOf("/alipay/activity.html")!=-1){  
  24.                 filterchain.doFilter(servletrequest, servletresponse);  
  25.                 return ;  
  26.             }  
  27.             if(requesturi!=null&&requesturi.indexOf("/alipayLogin.html")!=-1){  
  28.                 filterchain.doFilter(servletrequest, servletresponse);  
  29.                 return ;  
  30.             }  
  31.             RequestWrapper rw = new RequestWrapper(httpServletRequest);  
  32.             String param =  httpServletRequest.getQueryString();  
  33.             if(!"".equals(param) && param != null) {  
  34.                 param = URLDecoder.decode(param, "UTF-8");  
  35.                 String originalurl = requesturi + param;  
  36.                   
  37.                 String sqlParam = param;  
  38.                 //添加sql注入的判断  
  39.                 if(requesturi.endsWith("/askQuestion.html") || requesturi.endsWith("/member/answer.html")){  
  40.                     sqlParam = rw.cleanSQLInject(param);  
  41.                 }  
  42.                   
  43.                 String xssParam = rw.cleanXSS(sqlParam);  
  44.                 requesturi += "?"+xssParam;  
  45.                   
  46.                   
  47.                 if(!xssParam.equals(param)){  
  48.                     System.out.println("requesturi::::::"+requesturi);  
  49.                     httpServletResponse.sendRedirect(requesturi);  
  50.                     System.out.println("no entered.");  
  51. //                  filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);  
  52.                     return ;  
  53.                 }  
  54.             }  
  55.             filterchain.doFilter(servletrequest, servletresponse);  
  56.         }else{  
  57.               
  58.             //对请求中的所有东西都做校验,包括表单。此功能校验比较严格容易屏蔽表单正常输入,使用此功能请注意。  
  59.             filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);  
  60.         }  
  61.     }  

requestMapping:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public RequestWrapper(){  
  2.         super(null);  
  3.     }  
  4.   
  5.     public RequestWrapper(HttpServletRequest httpservletrequest) {  
  6.         super(httpservletrequest);  
  7.     }  
  8.   
  9.     public String[] getParameterValues(String s) {  
  10.         String str[] = super.getParameterValues(s);  
  11.         if (str == null) {  
  12.             return null;  
  13.         }  
  14.         int i = str.length;  
  15.         String as1[] = new String[i];  
  16.         for (int j = 0; j < i; j++) {  
  17.             as1[j] = cleanXSS(cleanSQLInject(str[j]));  
  18.         }  
  19.   
  20.         return as1;  
  21.     }  
  22.   
  23.     public String getParameter(String s) {  
  24.         String s1 = super.getParameter(s);  
  25.         if (s1 == null) {  
  26.             return null;  
  27.         } else {  
  28.             return cleanXSS(cleanSQLInject(s1));  
  29.         }  
  30.     }  
  31.   
  32.     public String getHeader(String s) {  
  33.         String s1 = super.getHeader(s);  
  34.         if (s1 == null) {  
  35.             return null;  
  36.         } else {  
  37.             return cleanXSS(cleanSQLInject(s1));  
  38.         }  
  39.     }  
  40.   
  41.     public String cleanXSS(String src) {  
  42.         String temp =src;  
  43.   
  44.         System.out.println("xss---temp-->"+src);  
  45.         src = src.replaceAll("<""<").replaceAll(">"">");  
  46.        // if (src.indexOf("address")==-1)  
  47.     //  {  
  48.           src = src.replaceAll("\\(""(").replaceAll("\\)"")");  
  49.         //}  
  50.        
  51.         src = src.replaceAll("'""'");  
  52.           
  53.         Pattern pattern=Pattern.compile("(eval\\((.*)\\)|script)",Pattern.CASE_INSENSITIVE);     
  54.         Matcher matcher=pattern.matcher(src);     
  55.         src = matcher.replaceAll("");  
  56.   
  57.         pattern=Pattern.compile("[\\\"\\'][\\s]*javascript:(.*)[\\\"\\']",Pattern.CASE_INSENSITIVE);   
  58.         matcher=pattern.matcher(src);  
  59.         src = matcher.replaceAll("\"\"");  
  60.           
  61.         //增加脚本   
  62.         src = src.replaceAll("script""").replaceAll(";""")  
  63.             .replaceAll("\"""").replaceAll("@""")  
  64.             .replaceAll("0x0d""")  
  65.             .replaceAll("0x0a""").replaceAll(",""");  
  66.   
  67.         if(!temp.equals(src)){  
  68.             System.out.println("输入信息存在xss攻击!");  
  69.             System.out.println("原始输入信息-->"+temp);  
  70.             System.out.println("处理后信息-->"+src);  
  71.         }  
  72.         return src;  
  73.     }  
  74.       
  75.     //需要增加通配,过滤大小写组合  
  76.     public String cleanSQLInject(String src) {  
  77.         String temp =src;  
  78.         src = src.replaceAll("insert""forbidI")  
  79.             .replaceAll("select""forbidS")  
  80.             .replaceAll("update""forbidU")  
  81.             .replaceAll("delete""forbidD")  
  82.             .replaceAll("and""forbidA")  
  83.             .replaceAll("or""forbidO");  
  84.           
  85.         if(!temp.equals(src)){  
  86.             System.out.println("输入信息存在SQL攻击!");  
  87.             System.out.println("原始输入信息-->"+temp);  
  88.             System.out.println("处理后信息-->"+src);  
  89.         }  
  90.         return src;  
  91.     }  

xml配置:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <filter>  
  2.         <filter-name>XssFilter</filter-name>  
  3.         <filter-class>cn.com.jsoft.xss.XSSFilter</filter-class>  
  4.         <init-param>  
  5.             <param-name>encoding</param-name>  
  6.             <param-value>UTF-8</param-value>  
  7.         </init-param>  
  8.     </filter>  
  9.     <filter-mapping>  
  10.         <filter-name>XssFilter</filter-name>  
  11.         <url-pattern>/*</url-pattern>  
  12.     </filter-mapping>  


以上代码仅仅将特殊的sql字符,特殊script脚本字符处理掉,具体的页面处理还需要后台处理!!


源码下载地址:http://download.csdn.net/detail/xb12369/7145235


0 0
原创粉丝点击