`
huangpengpeng
  • 浏览: 32502 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java web 利用filter 防止 Xss 攻击

    博客分类:
  • Xss
阅读更多
	<!--@分隔 -->
	<filter>
		<filter-name>xssFilter</filter-name>
		<filter-class>com.yoro.core.web.XssFilter</filter-class>
		<init-param>
			<param-name>SplitChar</param-name>
			<param-value>@</param-value>
		</init-param>
		<init-param>
			<param-name>FilterChar</param-name>
			<param-value>>@&lt;@\'@\"@\\@#@(@)</param-value>
		</init-param>
		<init-param>
			<param-name>ReplaceChar</param-name>
			<param-value>>'@<@‘@“@\@#@(@)</param-value>
		</init-param>
	</filter>
	
 <filter-mapping>
  
		<filter-name>xssFilter</filter-name>
		
  <url-pattern>/*</url-pattern>
 
	</filter-mapping>

 

  

package com.yoro.core.web;

/**
 * @author zoro
 */
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;

public class XssFilter implements Filter {
	
	private String filterChar;
	private String replaceChar;
	private String splitChar;
	FilterConfig filterConfig = null;
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterChar=filterConfig.getInitParameter("FilterChar");
		this.replaceChar=filterConfig.getInitParameter("ReplaceChar");
		this.splitChar=filterConfig.getInitParameter("SplitChar");
		this.filterConfig = filterConfig;
	}

	public void destroy() {
		this.filterConfig = null;
	}

	public void doFilter(ServletRequest request, ServletResponse response,

	FilterChain chain) throws IOException, ServletException {
		chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request,filterChar,replaceChar,splitChar), response);
	}
}

 

  

package com.yoro.core.web;



import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;


/**
 * @author zoro
 */
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
	private String[]filterChars;
	private String[]replaceChars;
	public XssHttpServletRequestWrapper(HttpServletRequest request,String filterChar,String replaceChar,String splitChar) {
		super(request);
		if(filterChar!=null&&filterChar.length()>0){
			filterChars=filterChar.split(splitChar);
		}
		if(replaceChar!=null&&replaceChar.length()>0){
			replaceChars=replaceChar.split(splitChar);
		}
	}
	public String getQueryString() {
		String value = super.getQueryString();
		if (value != null) {
			value = xssEncode(value);
		}
		return value;
	}
	
	/**
	 * 覆盖getParameter方法,将参数名和参数值都做xss过滤。<br/>
	 * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取<br/>
	 * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖
	 */
	public String getParameter(String name) {
		String value = super.getParameter(xssEncode(name));
		if (value != null) {
			value = xssEncode(value);
		}
		return value;
	}
	
	public String[] getParameterValues(String name) {
		String[]parameters=super.getParameterValues(name);
		if (parameters==null||parameters.length == 0) {
			return null;
		}
		for (int i = 0; i < parameters.length; i++) {
			parameters[i] = xssEncode(parameters[i]);
		}
		return parameters;
	}
	
	/**
	 * 覆盖getHeader方法,将参数名和参数值都做xss过滤。<br/>
	 * 如果需要获得原始的值,则通过super.getHeaders(name)来获取<br/> getHeaderNames 也可能需要覆盖
	 */
	public String getHeader(String name) {

		String value = super.getHeader(xssEncode(name));
		if (value != null) {
			value = xssEncode(value);
		}
		return value;
	}
	
	/**
	 * 将容易引起xss漏洞的半角字符直接替换成全角字符
	 * 
	 * @param s
	 * @return
	 */
	private  String xssEncode(String s) {
		if (s == null || s.equals("")) {
			return s;
		}
		try {
			s = URLDecoder.decode(s, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		for (int i = 0; i < filterChars.length; i++) {
			if(s.contains(filterChars[i])){
				s=s.replace(filterChars[i], replaceChars[i]);
			}
		}
		return s;
	}
}

 

0
0
分享到:
评论

相关推荐

    Java防止xss攻击附相关文件下载

    Java防止XSS攻击的核心策略是确保用户输入的数据在显示到网页上之前被适当地编码、转义或过滤,以防止恶意脚本被执行。XSS(跨站脚本)攻击是由于网页应用程序未能正确处理用户输入的数据,使得攻击者能够注入恶意...

    防止XSS攻击解决办法

    在Java Web应用中,可以使用过滤器(Filter)来拦截并处理请求,过滤掉可能的XSS攻击。以下是两种常用的过滤器: 1. OWASP Java Encoder库:这是一个开源项目,提供了针对不同场景的编码函数,可以将用户输入转义为...

    关于pdf文件xss攻击问题,配置xssFilter方法

    PDF文件XSS攻击问题主要指的是攻击者通过构造恶意的PDF文档,利用其中的脚本语言功能,尝试在用户的浏览器上执行跨站脚本攻击(XSS)。这种攻击方式可能导致敏感信息泄露、用户权限滥用或其他安全风险。在SpringBoot...

    预防XSS攻击和SQL注入XssFilter

    攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是...

    springmvc4配置防止XSS攻击的方法

    本文将详细介绍在Java开发框架Spring MVC中,如何配置防止XSS攻击的策略。在此过程中,也会提及如何对SQL注入进行防范。 在Spring MVC中防止XSS攻击的基本方法之一是通过实现过滤器来包装HttpServletRequest对象。...

    SpringBoot +esapi 实现防止xss攻击 实战代码,满满干货

    SpringBoot是一个流行的Java微服务框架,而ESAPI(Enterprise Security API)则是一个开源的安全库,旨在提供一种简便的方式来防御多种Web应用安全问题,包括XSS攻击。本实战代码将展示如何结合SpringBoot和ESAPI来...

    JAVA防止XSS注入,附jar包

    在网络安全领域,XSS(Cross-Site ...总之,防止XSS注入是Web应用开发中的核心任务,Java开发者应熟悉相关技术和最佳实践,以保护用户的数据安全。通过使用提供的jar包和适当的过滤器,可以有效地降低XSS攻击的风险。

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

    在SpringBoot项目中集成ESAPI(Enterprise Security API)可以有效地防止XSS攻击。本文将深入探讨如何在SpringBoot应用中结合springSecurity过滤器链,利用ESAPI库实现XSS防护。 首先,让我们了解ESAPI。ESAPI是一...

    使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验

    主要使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验 1,主要实现的是三大块功能:Xss攻击,sql注入,服务器白名单,以及csrf 2,此Filter为真实项目部署,在XssHttpServletRequestWrapper...

    防止SQL注入和XSS攻击Filter

    ### 防止SQL注入和XSS攻击Filter详解 #### 一、背景介绍 在现代Web应用开发过程中,确保应用程序安全至关重要。其中两大常见的安全威胁是SQL注入与跨站脚本(Cross Site Scripting,简称XSS)攻击。这两种攻击方式...

    java过滤器,防止XSS、SQL

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

    防xss攻击和sql注入

    3. 使用XSS防护库:如在Java中,我们可以使用提供的`XssHttpServletRequestWrapper`和`XssFilter`类。这两个文件可能实现了对HTTP请求的包装和过滤,通过对每个请求的参数进行检查和清洗,防止XSS攻击的发生。 SQL...

    xssprotect防止XSS攻击源码

    3. 防止URL重定向攻击:XSS攻击有时会利用URL重定向进行,因此需要检查请求中的URL参数,防止非法重定向。 4. 自定义配置:允许开发者根据项目需求,自定义需要过滤的参数和规则。 5. 日志记录:记录每次过滤操作,...

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

    为了防止XSS攻击,开发者通常会使用过滤器(Filter)来对HTTP请求中的输入进行清洗和转义,确保数据在展示到前端时不会执行任何恶意代码。在Spring Boot中,我们可以自定义Filter,例如实现`javax.servlet.Filter`...

    javaweb配置xssproject,完美解决安全检测报XSS漏洞

    XSSProject是一个专门针对XSS攻击防护的Java库,通过提供一系列的过滤规则和处理机制,帮助开发者构建更安全的Web应用。 首先,我们来了解一下XSSProject的核心功能。XSSProject主要包含以下几个方面: 1. **XSS...

    JSP spring boot / cloud 使用filter防止XSS

    为了防止XSS攻击,一种有效的方法是在Web应用中使用Filter来拦截请求,并对可能的输入进行处理,将特殊字符如“&lt;”、“&gt;”等转换为HTML转义字符,从而避免恶意代码被执行。 JSP与Spring Boot/Cloud结合使用时,...

    springboot整合XSS

    除了Spring Security,还可以使用如OWASP Java Encoder或Apache Shiro等库,它们提供了专门的函数用于安全地编码输出内容,防止XSS攻击。 六、最佳实践 1. 对用户输入进行验证和清洗,避免任何未经验证的数据进入...

    spring boot xss防御

    - 使用OWASP Java Encoder库,它提供了针对不同上下文的编码方法,以防止XSS攻击。 7. 源码分析: "xssdemo"项目可能包含了Spring Boot应用中实现上述防护策略的示例代码,通过查看源码,我们可以深入理解如何在...

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

    在Web开发中,XSS(Cross Site Scripting)攻击是一种常见的安全漏洞,它允许攻击者在用户的浏览器上执行恶意脚本。JSP过滤器是一种有效的防止XSS攻击的方法,通过在请求进入业务逻辑之前对输入数据进行处理,过滤掉...

    MLDN Java Web 开发实战经典源码李兴华源代码

    10. **安全与认证**:讲解如何实现用户登录、权限控制、防止SQL注入和XSS攻击等Web应用安全措施。 11. **部署与优化**:如何将应用部署到Tomcat、Jetty等服务器,以及性能调优技巧。 通过《MLDN Java Web 开发实战...

Global site tag (gtag.js) - Google Analytics