一: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
相关推荐
### Spring Boot XSS 攻击过滤插件使用及解决方案详解 #### XSS概述 XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见的Web安全漏洞。这种攻击方式利用了Web应用未能正确过滤用户提交的数据,导致恶意脚本...
综上所述,此解决方案通过包装请求、过滤器和工具类的组合,构建了一个防御XSS攻击的系统。它强调了在处理用户输入时的安全意识,并提供了一套标准化的防御策略。在部署和维护web应用程序时,理解和应用这样的安全...
本项目"java web Xss及sql注入过滤器.zip"就是针对这两种威胁提供的一种解决方案,基于流行的Spring Boot 2.0框架进行开发。 XSS 攻击是通过在网页中插入恶意脚本,当其他用户访问该页面时,这些脚本会被执行,从而...
我们可以利用这个特性,创建一个自定义的过滤器类,如`XssFilter`,它继承自`javax.servlet.Filter`接口,并实现其`doFilter()`方法。在这个方法里,我们将请求包装成一个特殊的`HttpServletRequest`子类,例如`...
Spring Security是Spring Boot推荐的安全管理框架,它提供了一套完整的安全解决方案,包括XSS防护。首先,我们需要在Spring Boot项目中引入Spring Security依赖: ```xml <groupId>org.springframework.boot ...
### JAVA项目实践:URL存在的跨站漏洞与注入漏洞解决方案 #### 一、跨网站脚本(XSS)概述 跨网站脚本(Cross-site scripting,通常简称为XSS或跨站脚本攻击)是一种常见的安全漏洞攻击方式,尤其针对网站应用程序。...
JSP过滤器是一种有效的防止XSS攻击的方法,通过在请求进入业务逻辑之前对输入数据进行处理,过滤掉可能包含恶意代码的字符。 首先,我们来理解Servlet过滤器的工作原理。Servlet过滤器是Java Servlet API的一部分,...
- **XSS Assistant**:一种辅助检测XSS漏洞的工具。 - **使用Bookmarklets**:通过书签小脚本来实现自动化攻击或检测。 - **使用Technika**:一种用于自动化XSS检测和攻击的技术。 - **总结**:对本章内容进行了回顾...
然而,随着互联网技术的发展,网络安全问题日益凸显,XSS (跨站脚本) 攻击与 SQL 注入攻击成为常见的安全威胁之一。因此,掌握如何在 Spring MVC 应用中有效防御这些攻击显得尤为重要。 #### 二、XSS 攻击与 SQL ...
在文档描述中提到了各种类型的XSS攻击情景和相应的解决方案。下面详细说明这些情景: 1. 什么都没过滤的入门情况:这指的是反射型XSS攻击,用户提交的数据直接被反射到页面上,没有进行任何过滤。由于这种漏洞的...
XSS(Cross Site Scripting)即跨站脚本攻击,是一种常见的Web应用程序安全漏洞。攻击者通过在Web页面中注入恶意脚本代码,当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的。XSS攻击...
在本文中,系统采取了过滤器(AntiSqlInjectionFilter)的方式来处理这个问题,这个过滤器会在系统初始化时启动,并对所有请求进行全局拦截,确保即使用户尝试输入恶意SQL字符,也会被有效地过滤掉。 其次,XSS攻击...
XSS(Cross-site scripting)是一种常见的网络安全漏洞,它允许攻击者在用户浏览器上执行恶意脚本,从而窃取敏感信息、操纵页面内容或执行其他恶意操作。为了防止这种攻击,PHP开发者通常会使用特定的插件来过滤或...
总之,"Python-一个基于burp的反射型xss检测插件"是Python开发与Web安全领域的一次优秀结合,它不仅体现了Python在网络安全工具开发中的潜力,也为Web安全测试提供了一种实用的解决方案。对于想要提升自己在这一领域...
始终记住,防止XSS攻击的最佳实践是结合使用多种方法,而不是依赖单一的解决方案。通过对用户输入进行严格的验证、转义和过滤,可以大大降低XSS攻击的风险。在“laravel-xss-filter-master”项目中,开发者可能已经...
4. **启用Spring的安全模块**:如Spring Security,它提供了一套完整的安全解决方案,包括XSS防护。 通过以上步骤,你可以成功地在基于JDK 1.6和Tomcat 6的环境中集成Spring 4.2.9、MyBatis 3.4.4、Jackson和XSS...
或者在模板中,使用过滤器: ```html {{ user_input|xss_clean }} ``` django-xss-cleaner库提供了详尽的文档和示例,帮助开发者更好地理解和使用这个工具。它是一个非常实用的组件,对于任何使用Django开发Web应用...
在`web.xml`配置文件中,可以定义一个过滤器来实现这个功能。例如,我们可以自定义一个`DisableUrlSessionFilter`,如下所示: ```xml <filter-name>DisableUrlSessionFilter <filter-class>...
在本系统中,已经实现了基于过滤器的解决方案,即AntiSqlInjectionfilter,它可以全局拦截并过滤掉含有恶意SQL字符的输入,确保系统安全。 二、XSS攻击 XSS分为DOM XSS、 Stored XSS和Reflected XSS,它们都是利用...
安全专家通常会发布这些漏洞的补丁和解决方案,管理员应定期检查并应用更新,以确保网站的安全。同时,使用像"FCK漏洞利器.exe"这样的工具进行定期扫描也是维护安全的重要步骤。对于企业而言,应建立严格的安全策略...