package com.dep.aop; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; /** * 拦截防止sql注入 * @author wb_zypt * */ 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); } if(value == null){ value = (String)getParameterMap().get(name); } return value; } @Override @SuppressWarnings("unchecked") public Map getParameterMap() { Map newParams = new HashMap(); Map params = super.getParameterMap(); /*for(Object entry : params.entrySet()){ String key = (String)((Entry)entry).getKey();//前台对应的key值 Object dbName = ((Entry)entry).getValue();//数据库描述字段 newParams.put(key, dbName); if(dbName instanceof String){ newParams.put(key, xssEncode((String)dbName)); }else if(dbName.getClass() == String[].class){ newParams.put(key, xssEncode((String[])dbName)); } }*/ Set<String> keySet = params.keySet(); for (Iterator iterator = keySet.iterator(); iterator.hasNext();) { String key = (String) iterator.next(); String[] str = (String[]) params.get(key); newParams.put(key, xssEncode((String[])str)); } return newParams; } 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] = xssEncode(values[i]); } return encodedValues; } /** * 覆盖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; } private static String[] xssEncode(String[] s) { String[] newStr = new String[s.length]; for(int i=0;i<s.length;i++){ newStr[i]= xssEncode(s[i]); } return newStr; } /** * 将容易引起xss漏洞的半角字符直接替换成全角字符 * * @param s * @return */ private static String xssEncode(String s) { if (s == null || "".equals(s)) { 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; } }
相关推荐
<filter-name>XssFilter</filter-name> <filter-class>com.xxx.Filter.XssFilter</filter-class> </filter> <filter-mapping> <filter-name>XssFilter</filter-name> <url-pattern>/* </filter-mapping>
3. 自定义XSSFilter:如果需要更细粒度的控制,可以创建自定义的XSSFilter类,重写`doFilter`方法,进行特定的XSS清理逻辑。这通常包括对请求参数、响应内容的清洗,去除或转义可能引发XSS的特殊字符。 4. 配置过滤...
原理过程 Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器范围,Springboot中没有web.xml,那Springboot中,不用管Filter是如何交给Ser...SpringBoot整合XssFilter,...
### XSSFilter源码详解 #### 一、XSSFilter概览 XSSFilter是一种用于防止跨站脚本攻击(Cross-Site Scripting,简称XSS)的安全组件。它通过过滤HTTP请求中的潜在恶意数据来阻止XSS攻击的发生。在本文档中,我们将...
直接可以运行,包含测试类,对HTML和SQL进行过滤,方便扩展。并且可以配置不拦截的路径,包含注释,方便学习。 博客地址:https://blog.csdn.net/u011974797/article/details/121792680
public class XssFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { ...
XSS_Filter_过滤器详解 在Web应用程序中,XSS(Cross-Site Scripting)是一种常见的安全漏洞。攻击者可以通过在Web应用程序中 inject 恶意脚本,从而获取用户的敏感信息或控制用户的行为。为了防止这种攻击,开发者...
内容概要:本文深入探讨了白盒审计中的XSS Filter绕过技巧,主要包括浏览器容错特性、属性内容编码、伪协议利用、数据URI协议等具体案例。同时提出了多种有效的富文本XSS防护方案,如使用HTML Purifier、UBB代码和...
XSS Filter Evasion Cheat Sheet 是一个专门针对如何检测和规避XSS过滤器的实用指南。下面将详细探讨XSS攻击的基本原理、类型以及如何利用XSS Filter Evasion技巧进行防御。** ### XSS攻击的基本概念 1. **反射型...
在前端开发中,XSS(Cross-site scripting)攻击是一种常见的安全威胁,它允许攻击者通过注入恶意脚本到网页上,从而控制用户浏览器的行为。"前端开源库-xss-filters"是一个专门针对这种情况设计的开源库,其目标是...
java过滤器,XSS : 跨站脚本攻击(Cross Site Scripting),SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
### 绕过Internet Explorer 9 的 XSS 过滤器:深度解析 在黑帽大会(Black Hat Conference)上,一篇名为《绕过Internet Explorer 9 的 XSS 过滤器》的论文引起了广泛关注。作者迈克尔·布鲁克斯(Michael Brooks)...
本文将深入探讨如何使用SpringBoot整合XssFilter和Jsoup来防范这些攻击。 **一、XSS攻击与防御** 1. **XSS攻击简介**:XSS(Cross Site Scripting)是一种常见的网络攻击方式,攻击者通过在网页上注入恶意脚本,...
<filter-name>XSSFilter</filter-name> <filter-class>com.example.XSSFilterClass</filter-class> </filter> <filter-mapping> <filter-name>XSSFilter</filter-name> <url-pattern>/* </filter-mapping> ``` ...
另外,可以通过Extension_XSSFilter::detectXSS($string)直接在您的扩展中使用XSS过滤器,该扩展Extension_XSSFilter::detectXSS($string)接受一个字符串,如果检测到XSS,则返回布尔值。 前端实用程序 从XSS Filter...
2. **初始化XSSFilter**:在Web应用的初始化阶段,创建XSSFilter实例并设置相应的过滤策略。这可能需要调用XSSFilter类的静态方法,或者通过Web容器的filter配置实现。 3. **配置过滤链**:根据项目需求,定义哪些...
4. 自定义过滤器:在给定的文件名“XssFilter.java”中,很可能定义了一个自定义的Servlet Filter,用于拦截和处理请求。这种过滤器可以在HTTP请求到达实际处理代码之前,对请求参数进行清洗或编码,防止XSS攻击。...
创建一个`XSSFilter`类,实现`Filter`接口,对请求和响应进行过滤: ```java @Component public class XSSFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse ...
在提供的"XssHttpServletRequestWrapper.java"和"XSSFilter.java"这两个文件中,我们可以看到开发者如何实现这个过程。 `XssHttpServletRequestWrapper.java`文件是自定义的一个HTTP请求包装器,它的目的是在请求被...