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

防止XSS注入的一种实现方式

    博客分类:
  • XSS
阅读更多

xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制。

 

比如说在表单input里输入<script>alert("xss")</script> 然后提交,就会在页面弹出窗口,所以我们就要过滤掉这些特殊字符。

 

我的实现方式是通过过滤器对请求进行包装,在包装类里重写了一些可能会出现xss攻击的方法,在该方法中过滤特殊字符。

 

首先是包装类XssHttpServletRequestWrapper

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

import org.springframework.web.util.HtmlUtils;

/**
 * XSS 
 * @author xieshangzhen
 *
 */
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
	
	public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) {
		super(servletRequest);
	}
	
	public String[] getParameterValues(String parameter) {
		String[] values = super.getParameterValues(parameter);
		if (values == null) return null;
		
		int count = values.length;
		String[] encodedValues = new String[count];
		for (int i = 0; i < count; i++) {
			encodedValues[i] = cleanXSS(values[i]);
		}
		
		return encodedValues;
	}
	
	public String getParameter(String parameter) {
		String value = super.getParameter(parameter);
		if (value == null) return null;
		
		return cleanXSS(value);
	}
	
	public String getHeader(String name) {
		String value = super.getHeader(name);
		if (value == null) return null;
		
		return cleanXSS(value);
	}
	
        //这里可以自己实现转义,也可以直接用工具类进行转义,比如说org.apache.common.lang.StringEscapeUtils和org.springframework.web.util.HtmlUtils
	private String cleanXSS(String value) {
		/*StringBuilder buffer = new StringBuilder(value.length() + 16);
		for (int i = 0; i < value.length(); i++) {
			char c = value.charAt(i);
			switch (c) {
			 case '>':
				 buffer.append(">");// 转义大于号
				 break;
			 case '<':
				 buffer.append("<");// 转义小于号
				 break;
			 case '\'':
				 buffer.append("'");// 转义单引号
				 break;
			 case '\"':
				 buffer.append("\""); // 转义双引号
				 break;
			 case '&':
				 buffer.append("&");// 转义&
				 break;
			 default:
				 buffer.append(c);
				 break;
			 }
		}
		
		return buffer.toString();*/
		//直接用spring的HtmlUtils 进行html转义
		if (value != null) {
			value = HtmlUtils.htmlEscape(value);
		}
		return value;
	}

 这里说下XssHttpServletRequestWrapper是继承了HttpServletRequestWrapper,而不是直接去现实HttpServletRequest接口,

这样做的好处是不用把这个接口的里面的方法全部实现一遍,只需要重写想重写的方法就可以,因为在HttpServletRequestWrapper类里已经都有了默认的实现了。

 

接下来就是要写个过滤器了

 

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;

/**
 * XSS 过滤器
 * @author xieshangzhen
 *
 */
public class XssFilter implements Filter {
	
	FilterConfig filterConfig = null;
	
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
	}
	
	public void destroy() {
		this.filterConfig = null;
	}
	//对request进行包装
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);
	}
}

 

然后在web.xml中配置过滤器,对所有的请求进行过滤

 

<filter>
		<filter-name>xssFilter</filter-name>
		<filter-class>com.xsz.xss.XssFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>xssFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>

 

ok,大功告成,这时候再提交一段脚本语句<script>alert(1)</script> 会被转义成

&lt;script&gt;alert(1)&lt;/script&gt;

 

1
1
分享到:
评论

相关推荐

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

    CSP是一种安全策略,允许服务器指定哪些源(sources)的资源可以加载到页面上。通过设置CSP,可以防止恶意脚本的注入,限制只执行从可信源加载的JavaScript。 6. **避免动态生成JavaScript**: 尽量避免在...

    JAVA防止XSS注入,附jar包

    对于Java开发人员来说,防止XSS注入至关重要,因为这有助于确保应用程序的安全性。本篇文章将深入探讨如何使用Java来防御XSS攻击,并介绍提供的jar包以及如何应用它们。 首先,了解XSS攻击的基本原理。XSS攻击通常...

    java防止xss注入

    **Java防止XSS注入详解** XSS(Cross-site scripting)是一种常见的网络安全漏洞,攻击者通过在网页中嵌入恶意脚本,使用户在不知情的情况下执行这些脚本,从而窃取用户信息或进行其他恶意操作。Java作为广泛应用于...

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

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

    xss-labs-master.zip(xss注入通关游戏/靶场)

    `xss-labs-master`是一个深入理解和实践XSS注入的绝佳平台,它涵盖了多种XSS类型和攻击方式,通过实战提升安全测试人员的技能。在解决每个挑战的过程中,参与者不仅可以掌握如何识别和利用XSS漏洞,还能学习如何有效...

    防止XSS攻击解决办法

    XSS(Cross-site scripting)攻击是一种常见的网络安全威胁,它利用了网站对用户输入的不当处理,使得攻击者能够注入恶意脚本,进而控制或者窃取用户的浏览器数据。防止XSS攻击是保护Web应用安全的重要一环,对于...

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

    在网络安全领域,XSS(Cross-Site Scripting)攻击是一种常见的威胁,它允许攻击者通过注入恶意脚本到网页上,来劫持用户会话、窃取敏感信息或执行其他恶意操作。SpringBoot是一个流行的Java框架,用于快速开发高效...

    springmvc4配置防止XSS攻击的方法

    总结来说,Spring MVC通过配置自定义过滤器来防止XSS攻击,是目前广泛采用的一种有效策略。同时,对于SQL注入的防范需要开发者在编写代码时提高警惕,确保每一步操作都不会为恶意攻击者打开方便之门。实现安全防护的...

    预防XSS攻击和SQL注入XssFilter

    XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin...

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

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

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

    在SpringBoot应用中配置XSSFilter,可以确保传入和传出的数据都经过安全处理,防止XSS攻击的发生。 配置XSSFilter通常涉及以下几个步骤: 1. 添加依赖:确保项目中已经包含了Spring Security或者类似的过滤器库,...

    防止SQL注入和XSS攻击Filter

    通过使用自定义的Filter来防止SQL注入和XSS攻击是一种常见且有效的安全措施。本文介绍了如何实现一个简单的XssFilter,并详细解释了其工作原理。在实际项目中,开发者还可以根据具体的业务需求进一步完善过滤逻辑,...

    Java防止xss攻击jar包

    在Java开发中,XSS(Cross Site Scripting)攻击是一种常见的安全威胁,它允许攻击者在用户的浏览器上执行恶意脚本。XSS攻击通常通过注入恶意代码到网页中,当用户浏览这些页面时,代码被执行,可能导致数据泄露、...

    ctf xss注入.pdf

    ### XSS注入技术详解 #### 一、XSS注入概述 ...综上所述,XSS注入是一种常见的网络安全威胁,了解其工作原理和技术手段对于防范此类攻击至关重要。通过对案例的分析和实践,可以更深入地理解XSS攻击及其防御措施。

    javascript过滤XSS

    JavaScript过滤XSS(Cross Site Scripting)是一种防御性编程技术,用于防止恶意用户通过注入脚本到网页中,对其他用户进行攻击。XSS攻击通常发生在动态生成HTML内容的场景,比如用户评论、论坛帖子等。攻击者可以...

    web安全之XSS攻击及防御pdf

    跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的Web应用程序安全漏洞,其形成原因主要是由于Web应用程序对用户输入的数据过滤不充分或者处理不当,导致恶意脚本被注入到网页中。当其他用户访问这些包含恶意...

    腾讯系列的XSS注入篇

    在网络安全领域,XSS(Cross-Site Scripting)攻击是一种常见的Web应用安全漏洞,它允许攻击者通过在网页上注入恶意脚本,进而控制或窃取用户的浏览器数据。本资料包"心伤的瘦子腾讯XSS系列"包含了21篇文章,详细...

    防xss攻击和sql注入

    SQL注入是一种利用不安全的SQL语句设计,使攻击者能够插入恶意SQL代码到数据库查询中的攻击方式。攻击者可以借此获取、修改、删除数据库中的数据,甚至完全控制数据库服务器。防范SQL注入的方法包括: 1. 参数化...

    xss攻击类型与防止xss攻击解决方案

    **XSS(跨站脚本攻击)是一种常见的网络安全漏洞...总之,防止XSS攻击需要开发者充分理解攻击机制,并在设计和实现Web应用时考虑安全性。通过结合多种防御手段,我们可以有效地降低XSS攻击的风险,保护用户的数据安全。

Global site tag (gtag.js) - Google Analytics