`
m635674608
  • 浏览: 5028490 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

xss filter

    博客分类:
  • java
 
阅读更多
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;
	}

}

 

分享到:
评论

相关推荐

    预防XSS攻击和SQL注入XssFilter

    &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.xxx.Filter.XssFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

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

    3. 自定义XSSFilter:如果需要更细粒度的控制,可以创建自定义的XSSFilter类,重写`doFilter`方法,进行特定的XSS清理逻辑。这通常包括对请求参数、响应内容的清洗,去除或转义可能引发XSS的特殊字符。 4. 配置过滤...

    SpringBoot整合XssFilter,Jsoup等实现请求参数的过滤,处理Xss攻击及sql注入.zip

    原理过程 Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器范围,Springboot中没有web.xml,那Springboot中,不用管Filter是如何交给Ser...SpringBoot整合XssFilter,...

    XSSFilter源码

    ### XSSFilter源码详解 #### 一、XSSFilter概览 XSSFilter是一种用于防止跨站脚本攻击(Cross-Site Scripting,简称XSS)的安全组件。它通过过滤HTTP请求中的潜在恶意数据来阻止XSS攻击的发生。在本文档中,我们将...

    Springboot配置XSS过滤器XssFilter.zip

    直接可以运行,包含测试类,对HTML和SQL进行过滤,方便扩展。并且可以配置不拦截的路径,包含注释,方便学习。 博客地址:https://blog.csdn.net/u011974797/article/details/121792680

    防止SQL注入和XSS攻击Filter

    public class XssFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { ...

    第十节 xss filter过滤器-01

    XSS_Filter_过滤器详解 在Web应用程序中,XSS(Cross-Site Scripting)是一种常见的安全漏洞。攻击者可以通过在Web应用程序中 inject 恶意脚本,从而获取用户的敏感信息或控制用户的行为。为了防止这种攻击,开发者...

    XSS-Filter-Evasion-Cheat-Sheet

    XSS Filter Evasion Cheat Sheet 是一个专门针对如何检测和规避XSS过滤器的实用指南。下面将详细探讨XSS攻击的基本原理、类型以及如何利用XSS Filter Evasion技巧进行防御。** ### XSS攻击的基本概念 1. **反射型...

    前端开源库-xss-filters

    在前端开发中,XSS(Cross-site scripting)攻击是一种常见的安全威胁,它允许攻击者通过注入恶意脚本到网页上,从而控制用户浏览器的行为。"前端开源库-xss-filters"是一个专门针对这种情况设计的开源库,其目标是...

    Bypassing Internet Explorer's XSS Filter

    ### 绕过Internet Explorer 9 的 XSS 过滤器:深度解析 在黑帽大会(Black Hat Conference)上,一篇名为《绕过Internet Explorer 9 的 XSS 过滤器》的论文引起了广泛关注。作者迈克尔·布鲁克斯(Michael Brooks)...

    SpringBoot整合XSS.zip

    本文将深入探讨如何使用SpringBoot整合XssFilter和Jsoup来防范这些攻击。 **一、XSS攻击与防御** 1. **XSS攻击简介**:XSS(Cross Site Scripting)是一种常见的网络攻击方式,攻击者通过在网页上注入恶意脚本,...

    防止XSS攻击解决办法

    &lt;filter-name&gt;XSSFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.example.XSSFilterClass&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;XSSFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt; ``` ...

    xssfilter:适用于Symphony CMS中事件的XSS筛选器

    另外,可以通过Extension_XSSFilter::detectXSS($string)直接在您的扩展中使用XSS过滤器,该扩展Extension_XSSFilter::detectXSS($string)接受一个字符串,如果检测到XSS,则返回布尔值。 前端实用程序 从XSS Filter...

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

    2. **初始化XSSFilter**:在Web应用的初始化阶段,创建XSSFilter实例并设置相应的过滤策略。这可能需要调用XSSFilter类的静态方法,或者通过Web容器的filter配置实现。 3. **配置过滤链**:根据项目需求,定义哪些...

    xss_javaxss_XSS_

    4. 自定义过滤器:在给定的文件名“XssFilter.java”中,很可能定义了一个自定义的Servlet Filter,用于拦截和处理请求。这种过滤器可以在HTTP请求到达实际处理代码之前,对请求参数进行清洗或编码,防止XSS攻击。...

    springboot整合XSS

    创建一个`XSSFilter`类,实现`Filter`接口,对请求和响应进行过滤: ```java @Component public class XSSFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse ...

    xss过滤.zip

    在提供的"XssHttpServletRequestWrapper.java"和"XSSFilter.java"这两个文件中,我们可以看到开发者如何实现这个过程。 `XssHttpServletRequestWrapper.java`文件是自定义的一个HTTP请求包装器,它的目的是在请求被...

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

    public class XssFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ...

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

    private XSSFilter xssFilter; @Override protected void configure(HttpSecurity http) throws Exception { http.addFilterBefore(xssFilter, CsrfFilter.class); // 其他安全配置... } // 忽略其他配置...

Global site tag (gtag.js) - Google Analytics