反射型xss解决方法,增加过滤器,防止反射型 XSS攻击漏洞

反射型xss解决方法,增加过滤器,防止反射型 XSS攻击漏洞web.xml配置<filter> <filter-name>XSSFilter</filter-name> <filter-class>com.xxx.filter.NewXssFilter</filter-class> </filter> <filter-mapping> <filter-name>XSSFilter</filter-name> <url

大家好,又见面了,我是你们的朋友全栈君。

web.xml配置

    <filter>
		<filter-name>XSSFilter</filter-name>
		<filter-class>com.xxx.filter.NewXssFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>XSSFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>XSSFilter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>

添加XSS过滤器,NewXssFilter.java

package com.xxx.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;
import javax.servlet.http.HttpServletResponse;

import com.picc.platform.common.utils.NewXssHttpServletRequestWrapper;

public class NewXssFilter implements Filter {  
    FilterConfig filterConfig = null;  
    public void destroy() {  
       this.filterConfig = null;  
   }  
  
  public void doFilter(ServletRequest request, ServletResponse response,  
           FilterChain chain) throws IOException, ServletException {  
	  NewXssHttpServletRequestWrapper NewXssrequest = new  NewXssHttpServletRequestWrapper((HttpServletRequest)request);
	 HttpServletResponse NewXssresponse = (HttpServletResponse)response;
	 chain.doFilter(NewXssrequest, NewXssresponse);
   }  
  
   public void init(FilterConfig filterConfig) throws ServletException {  
       this.filterConfig = filterConfig;  
   }
 
}

NewXssHttpServletRequestWrapper.java

package com.xxx.common.utils;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

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

import org.apache.commons.lang3.StringEscapeUtils;

public class NewXssHttpServletRequestWrapper extends HttpServletRequestWrapper {

	
	HttpServletRequest orgRequest = null;

	public NewXssHttpServletRequestWrapper(HttpServletRequest request) {
		super(request);
		// TODO Auto-generated constructor stub
		orgRequest = request;
	}

	public String getParameter(String name) {
		String value = super.getParameter(xssEncode(name));
		if (value != null) {
			value = xssEncode(value);
		}
		return value;
	}

	public String getHeader(String name) {

		String value = super.getHeader(xssEncode(name));
		if (value != null) {
			value = xssEncode(value);
		}
		return value;
	}

	public Map<String, String[]> getParameterMap() {
		Map<String, String[]> paramMap = super.getParameterMap();
		Set<String> keySet = paramMap.keySet();
		for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
			String key = (String) iterator.next();
			String[] str = paramMap.get(key);
			for (int i = 0; i < str.length; i++) {
				str[i] = xssEncode(str[i]);
			}
		}
		return paramMap;
	}
	

	private static String xssEncode(String s) {

		if (s == null || s.isEmpty()) {
			return s;
		}
		return StringEscapeUtils.escapeHtml4(s);

	}
	
	/**
	 * 获取最原始的request
	 * 
	 * @return
	 */
	public HttpServletRequest getOrgRequest() {
		return orgRequest;
	}

	/**
	 * 获取最原始的request的静态方法
	 * 
	 * @return
	 */
	public static HttpServletRequest getOrgRequest(HttpServletRequest req) {
		if (req instanceof NewXssHttpServletRequestWrapper) {
			return ((NewXssHttpServletRequestWrapper) req).getOrgRequest();
		}

		return req;
	}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139826.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于hard work的名言_partyhard

    关于hard work的名言_partyhard今天看了美团饿了么的app撕逼,作为程序员而且是app开发者,表示深深的蛋疼了。知乎原文:如何评价美团外卖商家版强杀竞争对手的商家版App进程?不评价回答里各种关于程序员节操问题的论述,能看到这篇博客的,心里都明白需求是谁提的。单聊聊hardcode的事。我不是科班出身,所以之前还这个词还真不是很熟悉。magicnumber倒是听说过。扯远了,http://blog.csdn

    2025年7月9日
    4
  • 服务器部署Nginx

    服务器部署Nginx服务器部署nginx简单明了

    2022年6月18日
    32
  • linux 更改文件读写权限_如何查看自己文件的权限

    linux 更改文件读写权限_如何查看自己文件的权限整理下Linux文件权限相关知识一、查看文件夹或文件的可读可写权限:ls-l文件夹解析“drwxrwxrwx”,这个权限说明一共10位。第一位代表文件类型,有两个数值:“d”和“-”,“d”代表目录,“-”代表非目录。后面9位可以拆分为3组来看,分别对应不同用户,2-4位代表所有者user的权限说明,5-7位代表组群group的权限说明,8-10位代表其他人

    2025年10月30日
    4
  • VHDL和Verilog的区别

    VHDL和Verilog的区别这两种语言都是用于数字电子系统设计的硬件描述语言,而且都已经是IEEE的标准。VHDL1987年成为标准,而Verilog是1995年才成为标准的。这个是因为VHDL是美国军方组织开发的,而Verilog是一个公司的私有财产转化而来的。为什么Verilog能成为IEEE标准呢?它一定有其优越性才行,所以说Verilog有更强的生命力。 这两

    2022年4月19日
    49
  • 【转载】在VS2008中使用WSE 3.0过程全记录

    【转载】在VS2008中使用WSE 3.0过程全记录

    2021年11月18日
    50
  • spring boot tomcat 版本_springboot命令行启动

    spring boot tomcat 版本_springboot命令行启动一.查看spingboot下指定版本比如我们需要查SpringBoot2.3.9-RELEASE的内嵌Tomcat版本,可以打开链接:https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat/2.3.9.RELEASE我们可以退回到上一级,查找对应springboot版本,修改springboot版本,来达到修改tomcat版本的目的二.直接修改tomcat版本..

    2022年8月30日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号