1. 跨站点脚本编制

  风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。
  原因:未对用户输入正确执行危险字符清理。
  固定值:查看危险字符注入的可能解决方案。

2. pom.xml添加依赖

<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.3</version>
</dependency>

3. 添加Xss包装类

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;/*** Xss包装类* * @author zzg**/public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {public static final Logger log= LoggerFactory.getLogger(XssHttpServletRequestWrapper .class);/*** 构造请求对象* * @param request*/public XssHttpServletRequestWrapper(HttpServletRequest request) {super(request);}/*** 获取头部参数* * @param v 参数值*/@Overridepublic 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 参数值*/@Overridepublic 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 参数值*/@Overridepublic 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.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.stereotype.Component;
import org.springframework.beans.factory.annotation.Value;/*** Xss过滤器* * @author zzg**/
@Component
@WebFilter(filterName = "XssFilter", urlPatterns = "/*")
public class XssFilter implements Filter {/*** 过滤器配置对象*/FilterConfig filterConfig = null;/*** 是否启用*/private boolean enable = true;/*** 忽略的URL*/@Value("${security.xss.excludes}")private String excludes;/*** 初始化*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;}/*** 拦截*/@Overridepublic 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);}/*** 销毁*/@Overridepublic void destroy() {this.filterConfig = null;}/*** 判断是否为忽略的URL* * @param urlPath URL路径* @return true-忽略,false-过滤*/private boolean isExcludeUrl(String url) {if (excludes == null || excludes.isEmpty()) {return false;}List<String> urls = Arrays.asList(excludes.split(","));return urls .stream().map(pattern -> Pattern.compile("^" + pattern)).map(p -> p.matcher(url)).anyMatch(Matcher::find);}
}

SpringBoot 安全漏洞之XSS注入攻击(jsoup版本)相关推荐

  1. web漏洞利用---XSS注入攻击

    XSS漏洞简介 XSS注入漏洞又称为"跨站脚本攻击(Cross Site Scripting)",为了不和层叠样式表(Cascading Style Sheets,CSS)混淆,所 ...

  2. crlf注入漏洞 java解决办法_HTTP响应拆分漏洞(CRLF注入攻击)解决办法

    HTTP响应拆分漏洞(也叫CRLF注入攻击)解决办法.出现HTTP响应拆分漏洞的网站攻击者可能注入自定义HTTP头.例如,攻击者可以注入会话cookie或HTML代码.这可能会进行类似的XSS(跨站点 ...

  3. 漏洞解决方案-SQL注入攻击

    漏洞解决方案-SQL注入攻击 前置知识 修复方案 代码参考 前置知识 SQL注入攻击,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. ...

  4. [风一样的创作]防XSS注入攻击

    一.首先大概理解下什么是XSS注入攻击 XSS注入攻击本质上就是通过你服务本身的接口把一些HTML,CSS,JS,SQL语句等内容存储进你的服务里面,一般是数据库里面,这时候就可以通过这些存储进去的内 ...

  5. js基础笔记学习235解决xss注入攻击

  6. Cross-Site Scripting(XSS): 跨站脚本攻击介绍

    一.XSS攻击简介 作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的. 在XSS攻击中,一般有三个角色参与:攻击者.目标服务器.受害者 ...

  7. SQL注入攻击再度肆虐殃及大量网站

    据研究人员称,上周一个自动SQL注入攻击劫掠了超过70,000个美国网站,并顺带攻击了访问这些网站的大量PC机用户.通过Google可以很容易搜索到受攻击的网站,网页内容千差万别,包括教育网和政府网域 ...

  8. 3.7 命令注入攻击

    1.命令注入攻击 概念:指由于开发人员缺少安全意识,在开发Web应用时未对用户提交的数据进行合规性检查,导致攻击者能够将命令作为普通用户数据提交给服务器执行 命令攻击形式有以下三种: 系统命令注入攻击 ...

  9. SQL注入攻击及其防范检测技术研究

    2008-12-18  来自:51CTO  作者:陈小兵 本文简要介绍了SQL注入攻击的原理,SQL注入攻击实现过程,并在此基础上给出了一种SQL注入攻击的自动防范模型. 1  SQL注入攻击概述 1 ...

最新文章

  1. springboot RestTemplate httpclient
  2. Java enum枚举类型
  3. MDS 9148 配置
  4. 国庆佳节,我们有好礼相送!
  5. php中的一些编程例子
  6. FDQuery 怎么能插入NULL参数
  7. 计算字符串长度(英文占1个字符,中文汉字占2个字符)
  8. 机器学习中性能评估指标中的准确率(Accuracy)、召回率(Recall=TPR)、精确率(Precision)、误报率(FPR)、漏报率(FNR)及其关系
  9. 有关计算机知识的外文翻译,计算机专业外文翻译+原文-DBMS和MIS
  10. 生物信息学简史,A brief history of bioinformatics- Briefings in Bioinformatics综述解读
  11. 整数(奇偶)+分数分频器的verilog实现(大合集)
  12. Linux 系统不能正常关机解决办法
  13. 菜鸟Axios学习=官网
  14. 【ZBH选讲·拍照】
  15. 操作系统之虚拟化CPU(一)介绍
  16. oslo.messaging库
  17. 送给女朋友的3D立体动态相册的实现代码
  18. 点到点轨迹规划【1】——梯形速度曲线规划
  19. 远程视频监控之构思篇
  20. linux vnc 重启命令,vnc server配置、启动、重启与连接,图形管理linux系统

热门文章

  1. 爬虫爬取 淘宝联盟,淘宝客阿里妈妈 订单,细节
  2. 动态域名解析服务系统简介
  3. DTrace User Guide
  4. 杰里之用于做对讲机【篇】
  5. Mac KICAD几个快捷键-移动全图
  6. 贪吃蛇源码注释过程(未完成)
  7. 斑马快传,高效安全的内外网文件传输软件,可穿透网闸服务器杀毒。
  8. 硅谷女性成功的五大秘诀
  9. gnuplot 文件_如何使用gnuplot制作eps文件
  10. 源码解读之zrender-ZRender 类(3)