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

XSS漏洞解决方案之一:过滤器(转载)

    博客分类:
  • XSS
 
阅读更多

一:web.xml文件

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- 解决xss漏洞 --> 
  <filter
    <filter-name>xssFilter</filter-name
     <filter-class>com.baidu.rigel.sandbox.core.filter.XSSFilter</filter-class
  </filter
   
  <!-- 解决xss漏洞 --> 
  <filter-mapping
    <filter-name>xssFilter</filter-name
    <url-pattern>/*</url-pattern
  </filter-mapping
 
  <!-- 解决xss漏洞 -->
  <filter>
    <filter-name>xssFilter</filter-name>
     <filter-class>com.baidu.rigel.sandbox.core.filter.XSSFilter</filter-class>
  </filter>
 
  <!-- 解决xss漏洞 -->
  <filter-mapping>
    <filter-name>xssFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 

 
 
 
 
二:过滤器:XSSFilter.java
 
 
 
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
package com.rigel.sandbox.core.filter; 
   
import java.io.IOException; 
   
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 com.rigel.sandbox.core.util.XssHttpServletRequestWrapper; 
   
public class XSSFilter implements Filter { 
   
    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
    
   
    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
            FilterChain chain) throws IOException, ServletException { 
   
        XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper( 
                (HttpServletRequest) request); 
        chain.doFilter(xssRequest, response); 
    
   
    @Override 
    public void destroy() { 
    
   
 
package com.rigel.sandbox.core.filter;
 
import java.io.IOException;
 
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 com.rigel.sandbox.core.util.XssHttpServletRequestWrapper;
 
public class XSSFilter implements Filter {
 
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
 
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
 
XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper(
(HttpServletRequest) request);
chain.doFilter(xssRequest, response);
}
 
@Override
public void destroy() {
}
 
}

 

 
 
 
 
 
 
 
三:包装器:XssHttpServletRequestWrapper.java
 
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
package com.rigel.sandbox.core.util; 
   
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletRequestWrapper; 
   
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; 
        
        StringBuilder sb = new StringBuilder(s.length() + 16); 
        for (int i = 0; i < s.length(); i++) { 
            char c = s.charAt(i); 
            switch (c) { 
            case '>'
                sb.append(">");// 转义大于号  
                break
            case '<'
                sb.append("<");// 转义小于号  
                break
            case '\''
                sb.append("'");// 转义单引号  
                break
            case '\"'
                sb.append(""");// 转义双引号  
                break
            case '&'
                sb.append("&");// 转义&  
                break
            default
                sb.append(c); 
                break
            
        
        return sb.toString(); 
    
   
    /**
     * 获取最原始的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; 
    
}

 原文地址:http://www.2cto.com/Article/201309/247100.html

分享到:
评论

相关推荐

    SpringBootXSS攻击过滤插件使用XSS是什么解决方案.docx

    ### Spring Boot XSS 攻击过滤插件使用及解决方案详解 #### XSS概述 XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见的Web安全漏洞。这种攻击方式利用了Web应用未能正确过滤用户提交的数据,导致恶意脚本...

    xss解决方案.zip

    综上所述,此解决方案通过包装请求、过滤器和工具类的组合,构建了一个防御XSS攻击的系统。它强调了在处理用户输入时的安全意识,并提供了一套标准化的防御策略。在部署和维护web应用程序时,理解和应用这样的安全...

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

    本项目"java web Xss及sql注入过滤器.zip"就是针对这两种威胁提供的一种解决方案,基于流行的Spring Boot 2.0框架进行开发。 XSS 攻击是通过在网页中插入恶意脚本,当其他用户访问该页面时,这些脚本会被执行,从而...

    JSP使用过滤器防止Xss漏洞

    我们可以利用这个特性,创建一个自定义的过滤器类,如`XssFilter`,它继承自`javax.servlet.Filter`接口,并实现其`doFilter()`方法。在这个方法里,我们将请求包装成一个特殊的`HttpServletRequest`子类,例如`...

    springboot整合XSS

    Spring Security是Spring Boot推荐的安全管理框架,它提供了一套完整的安全解决方案,包括XSS防护。首先,我们需要在Spring Boot项目中引入Spring Security依赖: ```xml &lt;groupId&gt;org.springframework.boot ...

    JAVA项目实践,URL存在跨站漏洞,注入漏洞解决方案.docx

    ### JAVA项目实践:URL存在的跨站漏洞与注入漏洞解决方案 #### 一、跨网站脚本(XSS)概述 跨网站脚本(Cross-site scripting,通常简称为XSS或跨站脚本攻击)是一种常见的安全漏洞攻击方式,尤其针对网站应用程序。...

    JSP过滤器防止Xss漏洞的实现方法(分享)

    JSP过滤器是一种有效的防止XSS攻击的方法,通过在请求进入业务逻辑之前对输入数据进行处理,过滤掉可能包含恶意代码的字符。 首先,我们来理解Servlet过滤器的工作原理。Servlet过滤器是Java Servlet API的一部分,...

    XSS Attacks

    - **XSS Assistant**:一种辅助检测XSS漏洞的工具。 - **使用Bookmarklets**:通过书签小脚本来实现自动化攻击或检测。 - **使用Technika**:一种用于自动化XSS检测和攻击的技术。 - **总结**:对本章内容进行了回顾...

    Spring-MVC处理XSS、SQL注入攻击的方法总结

    然而,随着互联网技术的发展,网络安全问题日益凸显,XSS (跨站脚本) 攻击与 SQL 注入攻击成为常见的安全威胁之一。因此,掌握如何在 Spring MVC 应用中有效防御这些攻击显得尤为重要。 #### 二、XSS 攻击与 SQL ...

    那些年我们一起学XSS.pdf

    在文档描述中提到了各种类型的XSS攻击情景和相应的解决方案。下面详细说明这些情景: 1. 什么都没过滤的入门情况:这指的是反射型XSS攻击,用户提交的数据直接被反射到页面上,没有进行任何过滤。由于这种漏洞的...

    xss game挑战笔记.pdf

    XSS(Cross Site Scripting)即跨站脚本攻击,是一种常见的Web应用程序安全漏洞。攻击者通过在Web页面中注入恶意脚本代码,当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的。XSS攻击...

    java开发常见漏洞及处理说明

    在本文中,系统采取了过滤器(AntiSqlInjectionFilter)的方式来处理这个问题,这个过滤器会在系统初始化时启动,并对所有请求进行全局拦截,确保即使用户尝试输入恶意SQL字符,也会被有效地过滤掉。 其次,XSS攻击...

    php_XSS防攻击插件

    XSS(Cross-site scripting)是一种常见的网络安全漏洞,它允许攻击者在用户浏览器上执行恶意脚本,从而窃取敏感信息、操纵页面内容或执行其他恶意操作。为了防止这种攻击,PHP开发者通常会使用特定的插件来过滤或...

    Python-一个基于burp的反射型xss检测插件

    总之,"Python-一个基于burp的反射型xss检测插件"是Python开发与Web安全领域的一次优秀结合,它不仅体现了Python在网络安全工具开发中的潜力,也为Web安全测试提供了一种实用的解决方案。对于想要提升自己在这一领域...

    Laravel开发-laravel-xss-filter

    始终记住,防止XSS攻击的最佳实践是结合使用多种方法,而不是依赖单一的解决方案。通过对用户输入进行严格的验证、转义和过滤,可以大大降低XSS攻击的风险。在“laravel-xss-filter-master”项目中,开发者可能已经...

    Spring4.2.9+mybatis3.4.4集成(整合Jackson、防御XSS版)支持JDK1.6、Tomcat6

    4. **启用Spring的安全模块**:如Spring Security,它提供了一套完整的安全解决方案,包括XSS防护。 通过以上步骤,你可以成功地在基于JDK 1.6和Tomcat 6的环境中集成Spring 4.2.9、MyBatis 3.4.4、Jackson和XSS...

    django-xss-cleaner:Django XSS 清理器

    或者在模板中,使用过滤器: ```html {{ user_input|xss_clean }} ``` django-xss-cleaner库提供了详尽的文档和示例,帮助开发者更好地理解和使用这个工具。它是一个非常实用的组件,对于任何使用Django开发Web应用...

    jsessionid存在的问题及其解决方案

    在`web.xml`配置文件中,可以定义一个过滤器来实现这个功能。例如,我们可以自定义一个`DisableUrlSessionFilter`,如下所示: ```xml &lt;filter-name&gt;DisableUrlSessionFilter &lt;filter-class&gt;...

    java开发常见漏洞及处理说明整理.pdf

    在本系统中,已经实现了基于过滤器的解决方案,即AntiSqlInjectionfilter,它可以全局拦截并过滤掉含有恶意SQL字符的输入,确保系统安全。 二、XSS攻击 XSS分为DOM XSS、 Stored XSS和Reflected XSS,它们都是利用...

    FCK漏洞利器.zip

    安全专家通常会发布这些漏洞的补丁和解决方案,管理员应定期检查并应用更新,以确保网站的安全。同时,使用像"FCK漏洞利器.exe"这样的工具进行定期扫描也是维护安全的重要步骤。对于企业而言,应建立严格的安全策略...

Global site tag (gtag.js) - Google Analytics