在用java进行web业务开发的时候,对于页面上接收到的参数,除了极少数是步可预知的内容外,大量的参数名和参数值都是不会出现触发Xss漏洞的字符。而通常为了避免Xss漏洞,都是开发人员各自在页面输出和数据入库等地方加上各种各样的encode方法来避免Xss问题。而由于开发人员的水平不一,加上在编写代码的过程中安全意识的差异,可能会粗心漏掉对用户输入内容进行encode处理。针对这种大量参数是不可能出现引起Xss和SQL注入漏洞的业务场景下,因此可以使用一个适用大多数业务场景的通用处理方法,牺牲少量用户体验,来避免Xss漏洞和SQL注入。
那就是利用Servlet的过滤器机制,编写定制的XssFilter,将request请求代理,覆盖getParameter和getHeader方法将参数名和参数值里的指定半角字符,强制替换成全角字符。使得在业务层的处理时不用担心会有异常输入内容。
XssFilter.java
- package 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;
- public class XssFilter implements Filter {
- public void init(FilterConfig config) throws ServletException {
- }
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException
- {
- XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper(
- (HttpServletRequest) request);
- chain.doFilter(xssRequest, response);
- }
- public void destroy() {
- }
- }
XssHttpServletRequestWrapper.java
- package filter;
- 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;
- 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;
- }
- }
在web.xml中添加
- <filter>
- <filter-name>xssFilter</filter-name>
- <filter-class>filter.XssFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>xssFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
相关推荐
开发者应增强对XSS漏洞的认识,采取有效措施进行预防,保护用户数据安全。对于企业来说,定期进行安全审计和漏洞修复同样至关重要,以免遭受类似Samy蠕虫那样的大规模攻击,影响业务信誉和用户信任。
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的
XSS漏洞,全称为跨站脚本攻击(Cross-Site Scripting),是一种常见的网络安全漏洞。它允许攻击者将恶意脚本代码注入到正常的网页之中,当其他用户浏览这些网页时,嵌入在其中的恶意脚本就会执行,从而达到攻击者的...
标题 "XSS漏洞" 描述了我们今天要深入探讨的主题——跨站脚本攻击(Cross-Site Scripting,简称XSS)。XSS是一种常见的网络安全漏洞,它允许恶意攻击者通过在网页上注入可执行的脚本来对用户进行攻击。攻击者通常...
XSS(Cross-site scripting)漏洞是现代Web应用中常见的安全问题,主要表现为攻击者通过注入恶意脚本到网页中,...总之,理解和预防XSS漏洞是Web开发中的关键环节,需要持续关注最新的攻击手段,并采取有效的防护措施。
攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是...
在SpringBoot框架中,我们可以使用XSSFilter来预防这类攻击。 首先,理解XSS攻击的本质是关键。XSS攻击是通过在网页中注入可执行的脚本,当用户访问被注入脚本的页面时,这些脚本会在用户的浏览器环境中运行,从而...
在了解了XSS漏洞的产生原因(如未对用户输入进行过滤或转义)后,可以进行代码级别的静态分析来预防这类问题。对于非富文本,推荐使用`stringEscapeUtil.escapeHtml()`这样的函数对用户输入进行转义。对于富文本,...
本文将深入探讨如何在Spring Boot项目中整合并预防XSS(Cross-Site Scripting)攻击。XSS是一种常见的网络攻击方式,通过注入恶意脚本到网页中,来窃取用户数据或者执行恶意操作。 一、理解XSS攻击 XSS攻击主要...
### XSS漏洞修复策略 1. **输入验证与过滤**: 对所有用户提交的数据进行严格的检查,限制特定字符或字符集,避免危险脚本的输入。 2. **输出编码**: 在将用户输入的数据展示在页面上时,应使用适当的编码方式...
通过模拟攻击场景,用户可以更好地理解XSS漏洞的工作原理,从而在实际开发中采取相应的预防措施,如: 1. **输入验证**:确保所有的用户输入都经过严格的检查和过滤,避免非法字符和脚本注入。 2. **输出编码**:...
本项目旨在利用爬虫技术开发一个XSS检测程序,帮助网站管理员发现并预防XSS漏洞。 XSS攻击的类型主要包括反射型XSS、存储型XSS和DOM型XSS。反射型XSS通常出现在URL参数中,当用户点击特殊构造的链接时,恶意脚本会...
为了预防和补救XSS漏洞,可以采取多种策略。首先是通过安全编码实践来防止XSS漏洞。例如,始终对来自搜索字段和表单的输入进行清理,通过验证数据是否符合预期字段内容,并在“端点”处对其进行编码。下面是一个XSS...
第4章 发掘XSS漏洞,着重以黑盒和白盒的角度介绍如何发掘XSS漏洞,以便帮助读者树立安全意识。第5章 XSS Worm,讲解了Web 2.0的最大威胁——跨站脚本蠕虫,剖析了Web 2.0相关概念和其核心技术,这些知识对于理解和...
- 定期进行安全审计和渗透测试,发现并修复潜在的XSS漏洞。 - 部署日志监控系统,及时发现异常请求和行为。 通过以上这些策略,可以显著降低Java应用程序遭受XSS攻击的风险。然而,安全防护是一个持续的过程,...
**XSS注入详解** XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见的Web...在解决每个挑战的过程中,参与者不仅可以掌握如何识别和利用XSS漏洞,还能学习如何有效地预防这类攻击,从而提高Web应用的安全性。
XSS漏洞允许攻击者在网页中注入恶意代码,进而窃取用户信息;CSRF则能诱使用户在不知情的情况下执行恶意操作;文件包含漏洞可能导致恶意代码执行;路径遍历则可以访问到系统中的非预期文件。 针对这些漏洞,2012年...