主要是添加黑名单进行拦截

public class XSSFilter implements Filter {
private final Log logger = LogFactory.getLog(XSSFilter.class); // XSS处理Map
private static Map<String,String> xssMap = new HashMap<String,String>();
public void init(FilterConfig filterConfig) throws ServletException { // 含有脚本: script
xssMap.put("[s|S][c|C][r|R][i|C][p|P][t|T]", ""); /*16进制的javascript : 6a617661736372697074
(\\\\x6a|\\\\x4a) 表示的正则含义为 (\x6a|\x4a)
*/
xssMap.put("((\\\\x6a|\\\\x4a)(\\\\x61|\\\\x41)(\\\\x76|\\\\x56)(\\\\x61|\\\\x41)(\\\\x73|\\\\x53)|(\\\\x63|\\\\x43)(\\\\x72|\\\\x52)(\\\\x69|\\\\x49)(\\\\x70|\\\\x50)(\\\\x74|\\\\x54))", ""); /*16进制的script : 736372697074
(\\\\x6a|\\\\x4a) 表示的正则含义为 (\x6a|\x4a)
*/
xssMap.put("((\\\\x73|\\\\x53)|(\\\\x63|\\\\x43)(\\\\x72|\\\\x52)(\\\\x69|\\\\x49)(\\\\x70|\\\\x50)(\\\\x74|\\\\x54))", ""); // 含有脚本 javascript
xssMap.put("[\\\"\\\'][\\s]*[j|J][a|A][v|V][a|A][s|S][c|C][r|R][i|I][p|P][t|T]:(.*)[\\\"\\\']", "\"\""); // 含有函数: eval
xssMap.put("[e|E][v|V][a|A][l|L]\\((.*)\\)", ""); // 含有符号 (
xssMap.put("\\(", "("); // 含有符号 )
xssMap.put("\\)", ")"); } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request , xssMap), response);
}
}

Filter

package com.ulic.misp.wx.oauth2;

import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; import com.ulic.misp.pub.framework.log.Log;
import com.ulic.misp.pub.framework.log.LogFactory; public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { private final Log logger = LogFactory.getLog(XssHttpServletRequestWrapper.class);
private Map<String, String> xssMap; public XssHttpServletRequestWrapper(HttpServletRequest request) { super(request); } public XssHttpServletRequestWrapper(HttpServletRequest request, Map<String, String> xssMap) { super(request); this.xssMap = xssMap; } @Override
public String getQueryString() {
String queryString = super.getQueryString();
if(queryString==null){
return null;
}
queryString = cleanXSS(queryString);
logger.info("queryString :{}",queryString);
return queryString;
} @Override
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] = cleanXSS(values[i]); } return encodedValues; } @Override public String getParameter(String parameter) { String value = super.getParameter(parameter); if (value == null) { return null; } return cleanXSS(value); } public String getHeader(String name) { String value = super.getHeader(name); if (value == null) return null; return cleanXSS(value); } /**
*
* 清除恶意的XSS脚本
*
*
*
* @param value
*
* @return
*
*/ private String cleanXSS(String value) { Set<String> keySet = xssMap.keySet(); for (String key : keySet) { String v = xssMap.get(key); value = value.replaceAll(key, v); }
return value; }
}

重写请求的一些处理

XSS漏洞防护的更多相关文章

  1. php检查漏洞防护补丁-防护XSS,SQL,文件包含等多种高危漏洞

    /** * 通用漏洞防护补丁 * 功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞 * Class CheckRequestServer */ class CheckRequestSer ...

  2. 为什么主流网站无法捕获 XSS 漏洞?

    二十多年来,跨站脚本(简称 XSS)漏洞一直是主流网站的心头之痛.为什么过了这么久,这些网站还是对此类漏洞束手无策呢? 对于最近 eBay 网站曝出的跨站脚本漏洞,你有什么想法?为什么会出现这样的漏网 ...

  3. 一个跨域请求的XSS漏洞

    场景回顾 一个表单进行跨域提交的方式有很多,我们使用的采用隐藏iframe,在本域下放一个代理页面,通过服务端配合完成一次完整的请求. 首先,部署proxy.html代理页面.这个页面处理服务端返回的 ...

  4. (汉化改进作品)BruteXSS:Xss漏洞扫描脚本

    今天给大家进行汉化改进的事一款脚本工具:BruteXSS,这款脚本能自动进行插入XSS,而且可以自定义攻击载荷. 该脚本也同时提供包含了一些绕过各种WAF(Web应用防护系统)的语句.   0×01简 ...

  5. 快速找出网站中可能存在的XSS漏洞实践

    笔者写了一些XSS漏洞的挖掘过程记录下来,方便自己也方便他人. 一.背景 在本篇文章当中会一permeate生态测试系统为例,笔者此前写过一篇文章当中笔者已经讲解如何安装permeate渗透测试系统, ...

  6. 快速找出网站中可能存在的XSS漏洞实践(一)

    一.背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖掘过程记录 ...

  7. 从零学习安全测试,从XSS漏洞攻击和防御开始

    WeTest 导读 本篇包含了XSS漏洞攻击及防御详细介绍,包括漏洞基础.XSS基础.编码基础.XSS Payload.XSS攻击防御. 第一部分:漏洞攻防基础知识   XSS属于漏洞攻防,我们要研究 ...

  8. 浅谈xss漏洞

    0x00 xss漏洞简介 XSS漏洞是Web应用程序中最常见的漏洞之一.如果您的站点没有预防XSS漏洞的固定方法, 那么很可能就存在XSS漏洞. 跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Scr ...

  9. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

随机推荐

  1. 【Python-Django讲义】针对django的ppt讲义

    MCV思想: M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目 ...

  2. 转 什么是Mbps、Kbps、bps、kb、mb及其换算和区别

    Mbps 即 Milionbit pro second(百万位每秒): Kbps 即 Kilobit pro second(千位每秒): bps 即 bit pro second(位每秒): 速度单位 ...

  3. 【ARC076F】 Exhausted

    hall定理大概是匈牙利的理论基础吧 hall定理的内容:二分图\(G\)的的左部点点集为\(\rm X\),右部点点集为\(\rm Y\),设\(|\rm X|\leq |Y|\),则二分图\(G\ ...

  4. MyEclipse更换工作空间报错自动退出

    2.解决方法 后来找到一种方法,解决了我的问题,即找到图二中报错的那个jar包,我的是com.genuitec.eclipse.core_14.0.0.me201602080330.jar,然后将其文 ...

  5. 2018-2-13-win10-uwp-绑定密码

    title author date CreateTime categories win10 uwp 绑定密码 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17: ...

  6. linux c 链接详解2-定义和声明

    2定义和声明 摘自:linux c编程一站式学习 可以学会extern和static用法,头文件知识. 2.1. extern和static关键字 在上一节我们把两个程序文件放在一起编译链接,main ...

  7. Clip

    网页中的渲染是由CSS来实现,CSS2就不说了,那个没得说的,最常用的就是个颜色布局什么的. CSS3 自从有了CSS3,相比CSS2变得更具有活力了,CSS3没有什么方法函数的,它跟CSS2一样也是 ...

  8. 【leetcode】835. Image Overlap

    题目如下: 解题思路:抛开移动的过程只看移动完成的结果,记图片左上角为顶点,正方形边长为board,要使得两个图片要有重叠,那么一定其中一张图片的顶点和另外一张图片的某一个点重合.假设图片A的顶点A( ...

  9. SQL Server 2014 安装说明

    SQL Server 2014 安装说明 本节内容将说明如何通过安装向导在 Windows Server 2012 R2 上安装 SQL Server 2014. 先从 MSDN 网站上下载安装了 S ...

  10. nucleus 学习 中断

    ;************************************************************************ ;* ;* FUNCTION ;* ;* INT_I ...