XSS漏洞防护
主要是添加黑名单进行拦截
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漏洞防护的更多相关文章
- php检查漏洞防护补丁-防护XSS,SQL,文件包含等多种高危漏洞
/** * 通用漏洞防护补丁 * 功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞 * Class CheckRequestServer */ class CheckRequestSer ...
- 为什么主流网站无法捕获 XSS 漏洞?
二十多年来,跨站脚本(简称 XSS)漏洞一直是主流网站的心头之痛.为什么过了这么久,这些网站还是对此类漏洞束手无策呢? 对于最近 eBay 网站曝出的跨站脚本漏洞,你有什么想法?为什么会出现这样的漏网 ...
- 一个跨域请求的XSS漏洞
场景回顾 一个表单进行跨域提交的方式有很多,我们使用的采用隐藏iframe,在本域下放一个代理页面,通过服务端配合完成一次完整的请求. 首先,部署proxy.html代理页面.这个页面处理服务端返回的 ...
- (汉化改进作品)BruteXSS:Xss漏洞扫描脚本
今天给大家进行汉化改进的事一款脚本工具:BruteXSS,这款脚本能自动进行插入XSS,而且可以自定义攻击载荷. 该脚本也同时提供包含了一些绕过各种WAF(Web应用防护系统)的语句. 0×01简 ...
- 快速找出网站中可能存在的XSS漏洞实践
笔者写了一些XSS漏洞的挖掘过程记录下来,方便自己也方便他人. 一.背景 在本篇文章当中会一permeate生态测试系统为例,笔者此前写过一篇文章当中笔者已经讲解如何安装permeate渗透测试系统, ...
- 快速找出网站中可能存在的XSS漏洞实践(一)
一.背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖掘过程记录 ...
- 从零学习安全测试,从XSS漏洞攻击和防御开始
WeTest 导读 本篇包含了XSS漏洞攻击及防御详细介绍,包括漏洞基础.XSS基础.编码基础.XSS Payload.XSS攻击防御. 第一部分:漏洞攻防基础知识 XSS属于漏洞攻防,我们要研究 ...
- 浅谈xss漏洞
0x00 xss漏洞简介 XSS漏洞是Web应用程序中最常见的漏洞之一.如果您的站点没有预防XSS漏洞的固定方法, 那么很可能就存在XSS漏洞. 跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Scr ...
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
随机推荐
- TP框架实现文件的下载(主要解决文件存在中文文件名的问题)
namespace Home\Controller; use Think\Controller; use Org\Net\Http; class IndexController extends Con ...
- 牛客网练习赛 2 烟花(概率dp)
题目传送门 烟花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge, 64bit IO Format: %lld 题目 ...
- ollvm 新增字符串加密功能
好久没弄ollvm了,可以继续了,今天给ollvm新增了一个pass,用来加密字符串,这个pass是从别的库里面扒出来的. 本文是基于在Windows 上使用VS2017编译出来的ollvm,在这个基 ...
- scroll兼容性
document.html=>document.documentElement function scroll() { if(window.pageYOffset != null) // ie9 ...
- 【记录】Mybatis Generator生成数据对象Date/TimeStamp 查询时间格式化
Mybatis Generator是很好的工具帮助我们生成表映射关联代码,最近博主遇到一个问题,找了很久才解决, 就是用Mybatis Generator生成实体类的时候,Date 时间无法格式化输出 ...
- php yield关键字以及协程的实现
php的yield是在php5.5版本就出来了,而在初级php界却很少有人提起,我就说说个人对php yield的理解 Iterator接口 在php中,除了数组,对象可以被foreach遍历之外,还 ...
- struct模块的使用
原理: 将一组简单数据进行打包,转换为bytes格式发送.或者将一组bytes格式数据,进行解析. 接口使用 Struct(fmt) 功能: 生成结构化对象 参数:fmt 定制的数据结构 st.pac ...
- 第12篇Kubernetes 监控
一.Weave Scope: Weave Scope 容器地图 创建 Kubernetes 集群并部署容器化应用只是第一步.一旦集群运行起来,我们需要确保一起正常,所有必要组件就位并各司其 ...
- css3--css3模块
CSS3被拆分为"模块".旧规范已拆分成小块,还增加了新的. 一些最重要CSS3模块如下: 1.选择器(.基本选择器,层次选择器,伪类选择器,伪元素,属性选择器,通配符) 2.盒模 ...
- Elasticsearch index
POST/{index}/{type} Elasticsearch自动生成ID,自动生成的 ID 是 URL-safe. 基于 Base64 编码且长度为20个字符的 GUID 字符串. 这些 GUI ...