反射型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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 发卡网源码(企业和个人发卡网源码二合一)及代理系统附搭建教程

    发卡网源码(企业和个人发卡网源码二合一)及代理系统附搭建教程  最近,有网友问到,自己在上传发卡网源码的时候,总是各种出错。比如404、或者数据库错误等等。  如果通过自己上传源码,安装的时候还是出现各种错误。  附源码及演示:fakaysw.top  那么,我建议可以使用企业级发卡网源码的一键部署功能。  这个功能对于新手来说,非常好用,十分省心。  第一种方式是,找到宝塔面板的“软件商店”-“发卡网源码一键部署”  看一下列表中有没有你想要安装的程序,如果没有找到,看下面的第二种方式  第二种方式,找到“软件商店”,在搜索框搜索“发卡网一键

    2022年7月14日
  • 带宽和信道带宽_名词解释信道带宽

    带宽和信道带宽_名词解释信道带宽带宽和信道带宽信道带宽:是信道能通过的最高频率与最低频率之差带宽:表示通信线路所能够传输数据的能力,是数字信道所能传输的最高数据率,单位是bit/s。来自王道教材:

    2022年10月11日
  • linux安装elasticsearch7_elasticsearch入门

    linux安装elasticsearch7_elasticsearch入门Linux上elasticsearch7集群搭建前期准备:服务器三台168.168.12.62168.168.12.63168.168.12.64部署jdk解压jdk放在/data目录,/data/jdk配置环境变量,/etc/proifle里面加入如下exportJAVA_HOME=/data/jdkexportPATH=PATH:PATH:PATH:JAVA_HOME/binexportCLASSPATH=.:JAVAHOME/lib/tools.jar:JAVA_HOME/

    2022年10月13日
  • ElasticSearch 2.0以后的改动导致旧的资料和书籍需要订正的部分

    ElasticSearch 2.0以后的改动导致旧的资料和书籍需要订正的部分

    2021年9月11日
  • smalldatetime和datetime的差别

    smalldatetime和datetime的差别碰上了这件事,才学到教训,一直以为smalldatetime和datetime的差别只是在于时间范围:smalldatetime的有效时间范围1900/1/1~2079/6/6datetime的有效时间范围1753/1/1~9999/12/31所以我判断如果该值不用到太远的日期范围,就会使用smalldatetime。但我忽略了更关键的差别,那就是smalldatetime只精准到分,而datet…

    2022年5月19日
  • hashmap扩容后数据的迁移_HashMap扩容

    hashmap扩容后数据的迁移_HashMap扩容上文回顾在上文深入源码分析HashMap到底是怎样将元素put进去的我们着重分析了无参构造函数是如何创建map对象和HashMap是如何将第一个元素put进table的。此篇重点这篇我们将逐行代码分析1、有参构造函数是如何创建map对象的2、当元素增多导致扩容之后,元素是如何重新分布的同样,为了方便读者复盘,我截取源码是尽量将行号带上。jdk版本还是1.8结构图再重复一遍,HashMap的底层数据结构为数组+链表+红黑树的结构,放一个HashMap的结构示意图,有个大致印象。解剖思路

    2022年9月21日

发表回复

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

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