XSS防脚本注入的过滤器

简介:

XSS又叫CSS (CrossSite Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性.


了解一些内容,别人的文章


我们这里只是一个简单的例子,不全,我们在springmvc中做一个小的demo,

1.web.xml配置过滤器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- XSS过滤器  -->
< filter >
     < filter-name >XSSFilter</ filter-name >
     < filter-class >
         com.hanchao.filter.XssCheckFilter
     </ filter-class >
     < init-param >
         < param-name >errorPath</ param-name >
         < param-value >/views/error.jsp</ param-value >
     </ init-param >
     < init-param >
         < param-name >excludePaths</ param-name >
         < param-value >/login</ param-value >
     </ init-param
</ filter >
< filter-mapping >
     < filter-name >XSSFilter</ filter-name >
     < url-pattern >/*</ url-pattern >
</ filter-mapping >

2.过滤器代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package  com.kongzhong.passport.filter;
import  java.io.IOException;
import  java.util.Enumeration;
import  javax.servlet.Filter;
import  javax.servlet.FilterChain;
import  javax.servlet.FilterConfig;
import  javax.servlet.ServletException;
import  javax.servlet.ServletRequest;
import  javax.servlet.ServletResponse;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  com.kongzhong.base.util.KzStringUtil;
public  class  XSSCheckFilter  implements  Filter {
     private  FilterConfig config;
     private  static  String errorPath; //出错跳转的目的地
     private  static  String[] excludePaths; //不进行拦截的url
     private  static  String[] safeless = { "<script" ,    //需要拦截的JS字符关键字
              "</script" ,
              "<iframe" ,
              "</iframe" ,
              "<frame" ,
              "</frame" ,
              "set-cookie" ,
              "%3cscript" ,
              "%3c/script" ,
              "%3ciframe" ,
              "%3c/iframe" ,
              "%3cframe" ,
              "%3c/frame" ,
              "src=\"javascript:" ,
              "<body" ,
              "</body" ,
              "%3cbody" ,
              "%3c/body" ,
              //"<",
              //">",
              //"</",
              //"/>",
              //"%3c",
              //"%3e",
              //"%3c/",
              //"/%3e"
             };
     public  void  doFilter(ServletRequest req, ServletResponse resp,
             FilterChain filterChain)  throws  IOException, ServletException {   
         Enumeration params = req.getParameterNames();
         HttpServletRequest request = (HttpServletRequest) req;
         HttpServletResponse response = (HttpServletResponse) resp;
         //String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/";
                
         boolean  isSafe =  true ;
         String requestUrl = request.getRequestURI();
         //String queryUrl = request.getQueryString();
         //System.out.println("params:" + params + " , requestUrl:" + requestUrl + " , queryUrl" + queryUrl);
         if (isSafe(requestUrl)) {
             requestUrl = requestUrl.substring(requestUrl.indexOf( "/" ));
             if (!excludeUrl(requestUrl)) {
                 while  (params.hasMoreElements()) {
                     String cache = req.getParameter((String) params.nextElement());
                     if (KzStringUtil.isNotBlank(cache)) {
                         if (!isSafe(cache)) {
                             isSafe =  false ;
                             break ;
                         }
                     }
                 }
             }
         else  {
             isSafe =  false ;
         }
                
         if (!isSafe) {
             request.setAttribute( "err" "您输入的参数有非法字符,请输入正确的参数!" );
             request.getRequestDispatcher(errorPath).forward(request, response);
             return ;
         }
         filterChain.doFilter(req, resp);
     }
     private  static  boolean  isSafe(String str) {
         if (KzStringUtil.isNotBlank(str)) {    
             for  (String s : safeless) {
                 if (str.toLowerCase().contains(s)) {
                     return  false ;
                 }
             }
         }
         return  true ;
     }
            
     private  boolean  excludeUrl(String url) {      
         if (excludePaths !=  null  && excludePaths.length >  0 ) {                  
             for  (String path : excludePaths) {
                 if (url.toLowerCase().equals(path)) {
                     return  true ;
                 }
             }
         }
         return  false ;
     }
            
     public  void  destroy() {
     }
     public  void  init(FilterConfig config)  throws  ServletException {
         this .config = config;
         errorPath = config.getInitParameter( "errorPath" );
         String excludePath = config.getInitParameter( "excludePaths" );
         if (KzStringUtil.isNotBlank(excludePath)) {
             excludePaths = excludePath.split( "," );
         }
     }
}

https://github.com/finn-no/xss-html-filter





     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/1232119,如需转载请自行联系原作者



相关文章
|
4月前
|
存储 安全 JavaScript
XSS跨站脚本攻击详解(包括攻击方式和防御方式)
这篇文章详细解释了XSS跨站脚本攻击的概念、原理、特点、类型,并提供了攻击方式和防御方法。
668 1
|
3月前
|
存储 JavaScript 前端开发
Xss跨站脚本攻击(Cross Site Script)
Xss跨站脚本攻击(Cross Site Script)
|
6月前
|
SQL 安全 数据库
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
101 1
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
|
5月前
|
存储 JavaScript API
跨站脚本(XSS)
【8月更文挑战第17天】
38 3
|
5月前
|
监控 安全 JavaScript
对跨站脚本攻击(XSS)的防御策略?
【8月更文挑战第15天】
494 1
|
5月前
|
存储 JavaScript 安全
Web安全之XSS跨站脚本攻击
XSS(跨站脚本攻击)
131 7
|
6月前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【7月更文挑战第25天】在Python Web开发中确保应用安全至关重要。以下是针对SQL注入、XSS与CSRF攻击的防护策略及示例代码
82 6
|
6月前
|
SQL 安全 数据库
|
6月前
|
SQL 存储 安全
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
【7月更文挑战第25天】在Python Web应用开发中,安全至关重要,需防范如SQL注入、XSS与CSRF等攻击。**SQL注入**风险可通过避免直接拼接用户输入至SQL语句,改用参数化查询来缓解。**XSS**则需对用户输入的内容进行HTML转义处理,防止恶意脚本执行。对于**CSRF**,实现包括生成并验证CSRF令牌在内的防护机制是关键。综合运用这些防御策略能显著增强应用的安全性,但需持续学习以对抗不断变化的威胁。
87 5