`
wb284551926
  • 浏览: 540055 次
文章分类
社区版块
存档分类
最新评论

防止常见XSS 过滤 SQL注入 JAVA过滤器filter(转载)

 
阅读更多

XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。

sql注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

1、首先配置web.xml,添加如下配置信息:

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <!-- 解决xss & sql漏洞 -->  
  2. <filter>  
  3.     <filter-name>xssAndSqlFilter</filter-name>  
  4.     <filter-class>com.cup.cms.web.framework.filter.XssAndSqlFilter</filter-class>  
  5. </filter>  
  6. <!-- 解决xss & sql漏洞 -->  
  7. <filter-mapping>  
  8.     <filter-name>xssAndSqlFilter</filter-name>  
  9.     <url-pattern>*</url-pattern>  
  10. </filter-mapping>  

2、编写过滤器

 

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  *  
  3.  */  
  4. package com.cup.cms.web.framework.filter;  
  5.   
  6. import java.io.IOException;  
  7.   
  8. import javax.servlet.Filter;  
  9. import javax.servlet.FilterChain;  
  10. import javax.servlet.FilterConfig;  
  11. import javax.servlet.ServletException;  
  12. import javax.servlet.ServletRequest;  
  13. import javax.servlet.ServletResponse;  
  14. import javax.servlet.http.HttpServletRequest;  
  15.   
  16. /** 
  17.  * @Author hithedy 
  18.  * @Date 2016年2月2日 
  19.  * @Time 下午2:01:53 
  20.  */  
  21. public class XssAndSqlFilter implements Filter {  
  22.   
  23.     @Override  
  24.     public void destroy() {  
  25.         // TODO Auto-generated method stub  
  26.   
  27.     }  
  28.   
  29.     @Override  
  30.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {  
  31.         XssAndSqlHttpServletRequestWrapper xssRequest = new XssAndSqlHttpServletRequestWrapper((HttpServletRequest) request);  
  32.         chain.doFilter(xssRequest, response);  
  33.     }  
  34.   
  35.     @Override  
  36.     public void init(FilterConfig arg0) throws ServletException {  
  37.         // TODO Auto-generated method stub  
  38.   
  39.     }  
  40.   
  41. }  

3、包装器

 

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  *  
  3.  */  
  4. package com.cup.cms.web.framework.filter;  
  5.   
  6. import java.util.regex.Pattern;  
  7.   
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletRequestWrapper;  
  10.   
  11. /** 
  12.  * @Author hithedy 
  13.  * @Date 2016年2月2日 
  14.  * @Time 下午2:03:19 
  15.  */  
  16. public class XssAndSqlHttpServletRequestWrapper extends HttpServletRequestWrapper {  
  17.       
  18.     HttpServletRequest orgRequest = null;  
  19.       
  20.     public XssAndSqlHttpServletRequestWrapper(HttpServletRequest request) {  
  21.         super(request);  
  22.         orgRequest = request;  
  23.     }  
  24.   
  25.     /** 
  26.      * 覆盖getParameter方法,将参数名和参数值都做xss & sql过滤。<br/> 
  27.      * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取<br/> 
  28.      * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖 
  29.      */  
  30.     @Override  
  31.     public String getParameter(String name) {  
  32.         String value = super.getParameter(xssEncode(name));  
  33.         if (value != null) {  
  34.             value = xssEncode(value);  
  35.         }  
  36.         return value;  
  37.     }  
  38.   
  39.     /** 
  40.      * 覆盖getHeader方法,将参数名和参数值都做xss & sql过滤。<br/> 
  41.      * 如果需要获得原始的值,则通过super.getHeaders(name)来获取<br/> 
  42.      * getHeaderNames 也可能需要覆盖 
  43.      */  
  44.     @Override  
  45.     public String getHeader(String name) {  
  46.   
  47.         String value = super.getHeader(xssEncode(name));  
  48.         if (value != null) {  
  49.             value = xssEncode(value);  
  50.         }  
  51.         return value;  
  52.     }  
  53.   
  54.     /** 
  55.      * 将容易引起xss & sql漏洞的半角字符直接替换成全角字符 
  56.      *  
  57.      * @param s 
  58.      * @return 
  59.      */  
  60.     private static String xssEncode(String s) {  
  61.         if (s == null || s.isEmpty()) {  
  62.             return s;  
  63.         }else{  
  64.             s = stripXSSAndSql(s);  
  65.         }  
  66.         StringBuilder sb = new StringBuilder(s.length() + 16);  
  67.         for (int i = 0; i < s.length(); i++) {  
  68.             char c = s.charAt(i);  
  69.             switch (c) {  
  70.             case '>':  
  71.                 sb.append(">");// 转义大于号  
  72.                 break;  
  73.             case '<':  
  74.                 sb.append("<");// 转义小于号  
  75.                 break;  
  76.             case '\'':  
  77.                 sb.append("'");// 转义单引号  
  78.                 break;  
  79.             case '\"':  
  80.                 sb.append(""");// 转义双引号  
  81.                 break;  
  82.             case '&':  
  83.                 sb.append("&");// 转义&  
  84.                 break;  
  85.             case '#':  
  86.                 sb.append("#");// 转义#  
  87.                 break;  
  88.             default:  
  89.                 sb.append(c);  
  90.                 break;  
  91.             }  
  92.         }  
  93.         return sb.toString();  
  94.     }  
  95.   
  96.     /** 
  97.      * 获取最原始的request 
  98.      *  
  99.      * @return 
  100.      */  
  101.     public HttpServletRequest getOrgRequest() {  
  102.         return orgRequest;  
  103.     }  
  104.   
  105.     /** 
  106.      * 获取最原始的request的静态方法 
  107.      *  
  108.      * @return 
  109.      */  
  110.     public static HttpServletRequest getOrgRequest(HttpServletRequest req) {  
  111.         if (req instanceof XssAndSqlHttpServletRequestWrapper) {  
  112.             return ((XssAndSqlHttpServletRequestWrapper) req).getOrgRequest();  
  113.         }  
  114.   
  115.         return req;  
  116.     }  
  117.   
  118.     /** 
  119.      *  
  120.      * 防止xss跨脚本攻击(替换,根据实际情况调整) 
  121.      */  
  122.   
  123.     public static String stripXSSAndSql(String value) {  
  124.         if (value != null) {  
  125.             // NOTE: It's highly recommended to use the ESAPI library and  
  126.             // uncomment the following line to  
  127.             // avoid encoded attacks.  
  128.             // value = ESAPI.encoder().canonicalize(value);  
  129.             // Avoid null characters  
  130. /**         value = value.replaceAll("", "");***/  
  131.             // Avoid anything between script tags  
  132.             Pattern scriptPattern = Pattern.compile("<[\r\n| | ]*script[\r\n| | ]*>(.*?)</[\r\n| | ]*script[\r\n| | ]*>", Pattern.CASE_INSENSITIVE);  
  133.             value = scriptPattern.matcher(value).replaceAll("");  
  134.             // Avoid anything in a src="http://www.yihaomen.com/article/java/..." type of e-xpression  
  135.             scriptPattern = Pattern.compile("src[\r\n| | ]*=[\r\n| | ]*[\\\"|\\\'](.*?)[\\\"|\\\']", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);  
  136.             value = scriptPattern.matcher(value).replaceAll("");  
  137.             // Remove any lonesome </script> tag  
  138.             scriptPattern = Pattern.compile("</[\r\n| | ]*script[\r\n| | ]*>", Pattern.CASE_INSENSITIVE);  
  139.             value = scriptPattern.matcher(value).replaceAll("");  
  140.             // Remove any lonesome <script ...> tag  
  141.             scriptPattern = Pattern.compile("<[\r\n| | ]*script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);  
  142.             value = scriptPattern.matcher(value).replaceAll("");  
  143.             // Avoid eval(...) expressions  
  144.             scriptPattern = Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);  
  145.             value = scriptPattern.matcher(value).replaceAll("");  
  146.             // Avoid e-xpression(...) expressions  
  147.             scriptPattern = Pattern.compile("e-xpression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);  
  148.             value = scriptPattern.matcher(value).replaceAll("");  
  149.             // Avoid javascript:... expressions  
  150.             scriptPattern = Pattern.compile("javascript[\r\n| | ]*:[\r\n| | ]*", Pattern.CASE_INSENSITIVE);  
  151.             value = scriptPattern.matcher(value).replaceAll("");  
  152.             // Avoid vbscript:... expressions  
  153.             scriptPattern = Pattern.compile("vbscript[\r\n| | ]*:[\r\n| | ]*", Pattern.CASE_INSENSITIVE);  
  154.             value = scriptPattern.matcher(value).replaceAll("");  
  155.             // Avoid onload= expressions  
  156.             scriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);  
  157.             value = scriptPattern.matcher(value).replaceAll("");  
  158.         }  
  159.         return value;  
  160.     }  
  161.   
  162. }  

能够防止常见的XSS和SQL注入。

 

原文地址:http://blog.csdn.net/hithedy/article/details/50630109

分享到:
评论

相关推荐

    java web Xss及sql注入过滤器.zip

    java web 过滤器防止Xss、sql注入,基于spring boot 2.0框架开发。

    预防XSS攻击和SQL注入XssFilter

    三、过滤器配置 web.xml配置 &lt;filter&gt; &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.xxx.Filter.XssFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; ...

    java过滤器,防止XSS、SQL

    java过滤器,XSS : 跨站脚本攻击(Cross Site Scripting),SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

    Springboot配置XSS过滤器XssFilter.zip

    直接可以运行,包含测试类,对HTML和SQL进行过滤,方便扩展。并且可以配置不拦截的路径,包含注释,方便学习。 博客地址:https://blog.csdn.net/u011974797/article/details/121792680

    SpringBoot +esapi 实现防止xss攻击 实战代码

    SpringBoot +esapi springSecurity 过滤器链集成 实现防止xss攻击 实战代码

    SpringBoot+MybatisPlus+Thymeleaf+Layui+Html+SqlServer

    Filter + XSS 漏洞拦截 过滤器 其他: redis 自行添加 引入了lombok插件,简化了实体类的编写 使用HandlerInterceptor进行了操作权限控制+前端th:if等 数据库表使用自增唯一ID 封装了mybatis-plus-generator代码...

    IIS.SPF 网络防火墙在应用层过滤请求

    web安全下的网络防火墙开源项目 作用于IIS6,7,对SQL注入,XSS都能起到较好的防御效果

    企业员工角色权限管理平台(SpringBoot2.0+Mybatis+Shiro+Vue)

    本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、...

    jfinalpluginsjfinal-dreampie.zip

    14.xss过滤的StringEscapeUtils过滤器实现 public class AttackHandler extends Handler {  @Override  public void handle(String target, HttpServletRequest request, HttpServletResponse ...

    spring security 参考手册中文版

    13.5与其他基于过滤器的框架一起使用 118 13.6高级命名空间配置 118 14.核心安全筛选器 119 14.1 FilterSecurityInterceptor 119 14.2 ExceptionTranslationFilter 121 14.2.1 AuthenticationEntryPoint 122 14.2.2 ...

    EaglePHP 2.7

    13、高安全性,内置Filter组件实现过滤机制,防止SQL注入及XSS跨站脚本攻击。 14、支持ORM,真正实现OOP开发的快捷且性能优越。 15、内置Doc输出模块,为指定项目生成CHM或HTML格式的API开发手册。 安装步骤: ...

Global site tag (gtag.js) - Google Analytics