1. 跨站点脚本编制

  风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。

  原因:未对用户输入正确执行危险字符清理。

  固定值:查看危险字符注入的可能解决方案。

2. pom.xml添加依赖

<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

3. 添加Xss包装类

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist; import lombok.extern.slf4j.Slf4j; /**
* Xss包装类
*
* @author CL
*
*/
@Slf4j
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { /**
* 构造请求对象
*
* @param request
*/
public XssHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
} /**
* 获取头部参数
*
* @param v 参数值
*/
@Override
public String getHeader(String v) {
String header = super.getHeader(v);
if (header == null || "".equals(header)) {
return header;
}
return Jsoup.clean(super.getHeader(v), Whitelist.relaxed());
} /**
* 获取参数
*
* @param v 参数值
*/
@Override
public String getParameter(String v) {
String param = super.getParameter(v);
if (param == null || "".equals(param)) {
return param;
}
return Jsoup.clean(super.getParameter(v), Whitelist.relaxed());
} /**
* 获取参数值
*
* @param v 参数值
*/
@Override
public String[] getParameterValues(String v) {
String[] values = super.getParameterValues(v);
if (values == null) {
return values;
}
int length = values.length;
String[] resultValues = new String[length];
for (int i = 0; i < length; i++) {
// 过滤特殊字符
resultValues[i] = Jsoup.clean(values[i], Whitelist.relaxed()).trim();
if (!(resultValues[i]).equals(values[i])) {
log.debug("XSS过滤器 => 过滤前:{} => 过滤后:{}", values[i], resultValues[i]);
}
}
return resultValues;
}
}

4. 配置文件添加配置

# 信息安全
security:
xss:
enable: true
excludes:
- /login
- /logout
- /images/*
- /jquery/*
- /layui/*

5. 添加Xss过滤器

import java.io.IOException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; 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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* Xss过滤器
*
* @author CL
*
*/
@Component
@ConfigurationProperties(prefix = "security.xss")
@WebFilter(filterName = "XssFilter", urlPatterns = "/*")
public class XssFilter implements Filter { /**
* 过滤器配置对象
*/
FilterConfig filterConfig = null; /**
* 是否启用
*/
private boolean enable; public void setEnable(boolean enable) {
this.enable = enable;
} /**
* 忽略的URL
*/
private List<String> excludes; public void setExcludes(List<String> excludes) {
this.excludes = excludes;
} /**
* 初始化
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
} /**
* 拦截
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest; // 不启用或者已忽略的URL不拦截
if (!enable || isExcludeUrl(request.getServletPath())) {
filterChain.doFilter(servletRequest, servletResponse);
return;
}
XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper(request);
filterChain.doFilter(xssHttpServletRequestWrapper, servletResponse);
} /**
* 销毁
*/
@Override
public void destroy() {
this.filterConfig = null;
} /**
* 判断是否为忽略的URL
*
* @param urlPath URL路径
* @return true-忽略,false-过滤
*/
private boolean isExcludeUrl(String url) {
if (excludes == null || excludes.isEmpty()) {
return false;
}
return excludes.stream().map(pattern -> Pattern.compile("^" + pattern)).map(p -> p.matcher(url))
.anyMatch(Matcher::find);
}
}

跨站点脚本编制 - SpringBoot配置XSS过滤器(基于Jsoup)的更多相关文章

  1. 跨站点脚本编制 - SpringBoot配置XSS过滤器(基于mica-xss)

    1. 简介   XSS,即跨站脚本编制,英文为Cross Site Scripting.为了和CSS区分,命名为XSS.   XSS是最普遍的Web应用安全漏洞.这类漏洞能够使得攻击者嵌入恶意脚本代码 ...

  2. 跨站点请求伪造 - SpringBoot配置CSRF过滤器

    1. 跨站点请求伪造   风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务.   原因:应用程序使用的认证方法不充分. ...

  3. 使用过滤器解决SQL注入和跨站点脚本编制

    1 SQL注入.盲注 1.1 SQL注入.盲注概述 Web 应用程序通常在后端使用数据库,以与企业数据仓库交互.查询数据库事实上的标准语言是 SQL(各大数据库供应商都有自己的不同版本).Web 应用 ...

  4. 跨站点脚本编制-XSS 描述及解决方法

    跨站点脚本编制可能是一个危险的安全性问题,在设计安全的基于 Web 的应用程序时应该考虑这一点.本文中,描述了这种问题的本质.它是如何起作用的,并概述了一些推荐的修正策略. 当今的大多数网站都对 We ...

  5. 跨站点脚本编制实例(AppScan扫描结果)

    最近工作要求解决下web的项目的漏洞问题,扫描漏洞是用的AppScan工具,其中有很多是关于跨站点脚本编制问题的.下面就把这块东西分享出来. 原创文章,转载请注明 ------------------ ...

  6. js解决跨站点脚本编制问题

    1.前台处理(容易绕过): <script type="text/javascript"> $(document).ready(function(){ var url= ...

  7. 【漏洞三】跨站点脚本(XSS)攻击

    [漏洞] 跨站点脚本(XSS)攻击 [原因] 跨站点脚本(也称为xss)是一个漏洞,攻击者可以发送恶意代码(通常在(Javascript的形式)给另一个用户.因为浏览器无法知道脚本是否值得信任,所以它 ...

  8. ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...

  9. 跨站点脚本攻击XSS

    来源:http://www.freebuf.com/articles/web/15188.html 跨站点脚本攻击是一种Web应用程序的攻击,攻击者尝试注入恶意脚本代码到受信任的网站上执行恶意操作.在 ...

随机推荐

  1. Hadoop大数据平台之HBase部署

    环境:CentOS 7.4 (1708  DVD) 工具:Xshell+Xftp 1. 使用xftp将hbase上传到/usr/local目录下,将其解压并重命名. 2. 配置conf目录下的hbas ...

  2. 使用Folx下载热门电影居然这么简单

    在闲暇的时候,很多人会选择观看电影.电视剧来打发时间.对于一些热门的资源,可以通过网页搜索的方式,找到很多与之相对应的种子资源. 但有时候,一些不那么热门的资源就要花费较多时间搜索.有了Folx bt ...

  3. Mac升级资料丢失怎么办?EasyRecovery能恢复嘛?

    随着越来越多的用户选择性能更高的mac笔记本来工作,一般情况下,为了保证用户有一个很好的使用体验,Mac系统会在一定的时间内进行系统的更新,弥补前一个版本的不足.结果就有一些用户反应Mac升级后,电脑 ...

  4. CDR魔镜插件是什么,有哪些功能?

    CDR魔镜插件是一款功能强大的CorelDRAW插件,很多CDR用户很早直接就有接触,因其强大的功能性和快速运行的特点被广大用户所喜爱,没有繁琐的选项,无论新人小白,还是制图高手都能够很快的适应,实现 ...

  5. PDF文档工具:pdfFactory快照功能详解

    pdfFactory的快照功能,是通过一种类似截图的方式,将文档中的内容,如标题.图片.段落.文字等进行剪切的功能.剪切后的内容会转化为文本框的形式,我们可以对其进行加边框.旋转等编辑处理,但不能对其 ...

  6. python中eval()和json.loads的区别

    一.最近在写接口测试脚本时,发现当读取Excel用例时,有时候要用eval,有时候又要用json.loads,不知道区别,只能换一下就可以用了,不知道其中的原理,特地百度了下.于是就记录了下,以便后续 ...

  7. AFNetWorking 丢失数据

    问题描述: 使用AFNetWorking请求数据,请求成功,但是拿不到所需要的数据,但是使用其他平台都可以拿到数据. 原因分析: AFNetWorking无法解析. 解决方式: AFJSONRespo ...

  8. 802.11抓包软件对比之Microsoft Network Monitor

    从事WiFi嵌入式软件开发的同学,802.11协议层抓包分析是一个需要熟练掌握的一个技能,需要通过分析WiFi底层802.11协议层的数据包来定位问题.同时从学习802.11协议的角度而言,最有效的学 ...

  9. window consul安装和运行

    consul 前言 一.consul是什么? 二.使用步骤 1.安装 2.启动 结束~~ 前言 刚开始接触spring cloud,其中就有用到consul,简单介绍一下以及怎么安装运行起来 提示:以 ...

  10. C语言编程学习者问答第一期,看看这些问题你出现过吗?

    今天给大家分享我们学习基地的小伙伴遇到的问题,以及正确回答,看看这些问题你遇到过吗~ 1.这张图片文字"第二段"后面的说法是否有问题?   回答: 这是二进制的加法,很多人会误解减 ...