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> 会被转义成
<script>alert(1)</script>
相关推荐
CSP是一种安全策略,允许服务器指定哪些源(sources)的资源可以加载到页面上。通过设置CSP,可以防止恶意脚本的注入,限制只执行从可信源加载的JavaScript。 6. **避免动态生成JavaScript**: 尽量避免在...
对于Java开发人员来说,防止XSS注入至关重要,因为这有助于确保应用程序的安全性。本篇文章将深入探讨如何使用Java来防御XSS攻击,并介绍提供的jar包以及如何应用它们。 首先,了解XSS攻击的基本原理。XSS攻击通常...
**Java防止XSS注入详解** XSS(Cross-site scripting)是一种常见的网络安全漏洞,攻击者通过在网页中嵌入恶意脚本,使用户在不知情的情况下执行这些脚本,从而窃取用户信息或进行其他恶意操作。Java作为广泛应用于...
本项目"java web Xss及sql注入过滤器.zip"就是针对这两种威胁提供的一种解决方案,基于流行的Spring Boot 2.0框架进行开发。 XSS 攻击是通过在网页中插入恶意脚本,当其他用户访问该页面时,这些脚本会被执行,从而...
`xss-labs-master`是一个深入理解和实践XSS注入的绝佳平台,它涵盖了多种XSS类型和攻击方式,通过实战提升安全测试人员的技能。在解决每个挑战的过程中,参与者不仅可以掌握如何识别和利用XSS漏洞,还能学习如何有效...
XSS(Cross-site scripting)攻击是一种常见的网络安全威胁,它利用了网站对用户输入的不当处理,使得攻击者能够注入恶意脚本,进而控制或者窃取用户的浏览器数据。防止XSS攻击是保护Web应用安全的重要一环,对于...
在网络安全领域,XSS(Cross-Site Scripting)攻击是一种常见的威胁,它允许攻击者通过注入恶意脚本到网页上,来劫持用户会话、窃取敏感信息或执行其他恶意操作。SpringBoot是一个流行的Java框架,用于快速开发高效...
总结来说,Spring MVC通过配置自定义过滤器来防止XSS攻击,是目前广泛采用的一种有效策略。同时,对于SQL注入的防范需要开发者在编写代码时提高警惕,确保每一步操作都不会为恶意攻击者打开方便之门。实现安全防护的...
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin...
SpringBoot是一个流行的Java微服务框架,而ESAPI(Enterprise Security API)则是一个开源的安全库,旨在提供一种简便的方式来防御多种Web应用安全问题,包括XSS攻击。本实战代码将展示如何结合SpringBoot和ESAPI来...
在SpringBoot应用中配置XSSFilter,可以确保传入和传出的数据都经过安全处理,防止XSS攻击的发生。 配置XSSFilter通常涉及以下几个步骤: 1. 添加依赖:确保项目中已经包含了Spring Security或者类似的过滤器库,...
通过使用自定义的Filter来防止SQL注入和XSS攻击是一种常见且有效的安全措施。本文介绍了如何实现一个简单的XssFilter,并详细解释了其工作原理。在实际项目中,开发者还可以根据具体的业务需求进一步完善过滤逻辑,...
在Java开发中,XSS(Cross Site Scripting)攻击是一种常见的安全威胁,它允许攻击者在用户的浏览器上执行恶意脚本。XSS攻击通常通过注入恶意代码到网页中,当用户浏览这些页面时,代码被执行,可能导致数据泄露、...
### XSS注入技术详解 #### 一、XSS注入概述 ...综上所述,XSS注入是一种常见的网络安全威胁,了解其工作原理和技术手段对于防范此类攻击至关重要。通过对案例的分析和实践,可以更深入地理解XSS攻击及其防御措施。
JavaScript过滤XSS(Cross Site Scripting)是一种防御性编程技术,用于防止恶意用户通过注入脚本到网页中,对其他用户进行攻击。XSS攻击通常发生在动态生成HTML内容的场景,比如用户评论、论坛帖子等。攻击者可以...
跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的Web应用程序安全漏洞,其形成原因主要是由于Web应用程序对用户输入的数据过滤不充分或者处理不当,导致恶意脚本被注入到网页中。当其他用户访问这些包含恶意...
在网络安全领域,XSS(Cross-Site Scripting)攻击是一种常见的Web应用安全漏洞,它允许攻击者通过在网页上注入恶意脚本,进而控制或窃取用户的浏览器数据。本资料包"心伤的瘦子腾讯XSS系列"包含了21篇文章,详细...
SQL注入是一种利用不安全的SQL语句设计,使攻击者能够插入恶意SQL代码到数据库查询中的攻击方式。攻击者可以借此获取、修改、删除数据库中的数据,甚至完全控制数据库服务器。防范SQL注入的方法包括: 1. 参数化...
**XSS(跨站脚本攻击)是一种常见的网络安全漏洞...总之,防止XSS攻击需要开发者充分理解攻击机制,并在设计和实现Web应用时考虑安全性。通过结合多种防御手段,我们可以有效地降低XSS攻击的风险,保护用户的数据安全。