XSS 是什么

XSS(Cross Site Scripting)攻击全称跨站脚本攻击,为了不与 CSS(Cascading Style Sheets)名词混淆,故将跨站脚本攻击简称为 XSS,XSS 是一种常见 web 安全漏洞,它允许恶意代码植入到提供给其它用户使用的页面中。

xss 攻击流程

简单 xss 攻击示例

若网站某个表单没做相关的处理,用户提交相关恶意代码,浏览器会执行相关的代码。

解决方案

XSS 过滤说明

对表单绑定的字符串类型进行 xss 处理。

对 json 字符串数据进行 xss 处理。

提供路由和控制器方法级别的放行规则。

使用 mica-xss

引入一下 依赖即可

net.dreamlu

mica-core

2.0.9-GA

net.dreamlu

mica-xss

2.0.9-GA

测试 XSS 过滤

测试 GET 参数过滤

创建目标接口,模拟 get 提交

@GetMapping("/xss")

public String xss(String params){

return params;

}

返回为空

⋊> ~ curl --location --request GET 'http://localhost:8080/xss?params=%3Cscript%3Ealert(%27xxx%27)%3C/script%3E'

测试 POST form 参数过滤

创建目标接口,模拟 post form 提交

@PostMapping("/xss")

public String xss(String params){

return params;

}

返回为空

curl --location --request POST 'http://localhost:8080/xss' \

--header 'Content-Type: application/x-www-form-urlencoded' \

--data-urlencode 'params='

测试 POST body 参数过滤

创建目标接口,模拟 post body 提交

@PostMapping("/xss")

public String xss(@RequestBody Map body){

return body.get("params");

}

返回为空

curl --location --request POST 'http://localhost:8080/xss' \

--header 'Content-Type: application/json' \

--data-raw '{

"params":""

}'

跳过某些接口过滤

可以使用 @XssCleanIgnore 注解对方法和类级别进行忽略。

@XssCleanIgnore

@PostMapping("/xss")

public String xss(@RequestBody Map body){

return body.get("params");

}

原理分析

常见实现剖析

目前网上大多数的方案如下图,新增 XssFilter 拦截用户提交的参数,进行相关的转义和黑名单排除,完成相关的业务逻辑。在整个过程中最核心的是通过包装用户的原始请求,创建新的 requestwrapper 保证请求流在后边的流程可以重复读。

mica-xss 实现

1. 自定义 WebDataBinder 编辑器支持 form 过滤

Spring WebDataBinder 的作用是从 web request 中把 web 请求里的parameters绑定到对应的JavaBean上,在 Controller 方法中的参数类型可以是基本类型,也可以是封装后的普通 Java 类型。若这个普通的 Java 类型没有声明任何注解,则意味着它的每一个属性都需要到 Request 中去查找对应的请求参数,而 WebDataBinder 则可以帮助我们实现从 Request 中取出请求参数并绑定到 JavaBean 中。

SpringMVC 在绑定的过程中提供了用户自定义编辑绑定的接口,注入即可在参数绑定 JavaBean 过程中执行过滤。

2. 自定义 JsonDeserializer 反序列化支持 Json 过滤

在 Spring Boot 中默认是使用 Jackson 进行序列化和反序列化 JSON 数据的,那么除了可以用默认的之外,我们也可以编写自己的 JsonSerializer 和 JsonDeserializer 类,来进行自定义操作。用户提交 JSON 报文会通过 Jackson 的 JsonDeserializer 绑定到 JavaBean 中。我们只需要自定义 JsonDeserializer 即可完成在绑定 JavaBean 中执行过滤。

核心过滤逻辑

在 mica-xss 中并未采取上文所述通过自己手写黑名单或者转义方式的实现方案,而是直接实现 Jsoup 这个工具类。

jsoup 实现 WHATWG HTML5 规范,并将 HTML 解析为与现代浏览器相同的 DOM。

从 URL,文件或字符串中刮取和解析 HTML

使用 DOM 遍历或 CSS 选择器查找和提取数据

操纵 HTML 元素,属性和文本

清除用户提交的内容以防止安全白名单,以防止 XSS 攻击

输出整洁的 HTML

java 过滤攻击报文_Spring Boot XSS 攻击过滤插件使用相关推荐

  1. 如何防止通过url攻击_什么是XSS攻击?如何防御XSS攻击?

    大家上午好,大家经常听到XSS攻击这个词,那么XSS攻击到底是什么,以及如何防御大家清楚么?今天,小墨就给大家讲一下:XSS攻击的定义.类型以及防御方法.什么是XSS攻击? XSS攻击全称跨站脚本攻击 ...

  2. C# NHtmlFilter 帮你过滤Html危险脚本 防止XSS攻击

    转:http://www.oschina.net/code/snippet_222150_9776 与原文代码略有改动 /// <summary>/// Html 脚本过滤/// < ...

  3. java订阅发布模式_Spring Boot ActiveMQ发布/订阅消息模式原理解析

    本文在<Spring Boot基于Active MQ实现整合JMS>的基础上,介绍如何使用ActiveMQ的发布/订阅消息模式.发布/订阅消息模式是消息发送者发送消息到主题(topic), ...

  4. java metrics 简书_Spring Boot Metrics

    Spring Metrics https://docs.spring.io/spring-metrics/docs/current/public/prometheus Spring Boot Metr ...

  5. java ldap userpassword 解密_Spring Boot中使用LDAP来统一管理用户信息

    LDAP简介 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门针对读 ...

  6. java 自动启动监听_Spring Boot 启动事件和监听器,太强大了!

    大家都知道,在 Spring 框架中事件和监听无处不在,打通了 Spring 框架的任督二脉,事件和监听也是 Spring 框架必学的核心知识之一. 一般来说,我们很少会使用到应用程序事件,但我们也不 ...

  7. java接口废弃注释_Spring Boot如何让Web API自动生成文档,并解决swagger-annotations的API注解description属性废弃的问题...

    前后端分离的系统架构中,前端开发人员需要查看后端WEB API的文档来进行开发.采用后端API文档自动生成的方式,可以大幅提高开发效率.swagger是一个被广泛使用的文档自动生成工具,可以与多种编程 ...

  8. java -jar 工作原理_Spring Boot 的java -jar命令启动原理详解

    导语 在运用Spring Boot 后,我们基本上摆脱之前项目每次上线的时候把项目打成war包.当然也不排除一些奇葩的规定,必须要用war包上线,不过很多时候,我们对一些东西只是处在使用的阶段,并不会 ...

  9. java 项目启动初始化_Spring Boot解决项目启动时初始化资源的方法

    前言 在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初 ...

最新文章

  1. no python interpreter configured
  2. 怎样才算得上合格的程序员,教你一招
  3. TutorialsPoint 电子书 归档 2017
  4. 学习红黑树过程中的个人总结
  5. [Spark][Python]对HDFS 上的文件,采用绝对路径,来读取获得 RDD
  6. 从零开始搭建神经网络并将准确率提升至85%
  7. word2016+endnoteX7的安装与配置
  8. Appium iOS 自动化测试总结
  9. cmd的常用命令分类详解
  10. oracle ebs bug,ORACLE EBS 价目表的导入效能-存储过程BUG
  11. DC-DC隔离电源模块与非隔离电源模块有什么区别?
  12. 机械臂——D-H参数标定
  13. h5调用指纹识别_HTML5 + JS 网站追踪技术:帆布指纹识别 Canvas FingerPrinting Universally Unique Identifier,简称UUID...
  14. 工程制图 ( 制图的基本知识和基本技能)
  15. 【辅助驾驶】Python在Windows系统下实现TTS(文字转语音)
  16. jos lab 2-3函数说明
  17. C语言(二)— 整型
  18. k8s Nodeport方式下service访问,iptables处理逻辑(转)
  19. kafka windows环境搭建 SASL_PLAINTEXT/SCRAM
  20. 啪!啪!给 JobIntentService 打针, Hilt 号的大针,看你爽不爽?哎呦,Espresso 看不到结果,用 UiAutomator 测。

热门文章

  1. 检查企业的销售和分销结构
  2. SAP SF打印次数统计
  3. sap abap中动态指定查询条件
  4. MBEWH-查看历史期间的移动平均价
  5. 会计记忆总结之三:会计等式与复式记账
  6. 怎样把java换主题_java – 如何在切换主题时考虑变化?
  7. linux运行 netcore,linux 下netcore程序开机自动启动服务
  8. .net mvc 报表_Web在线报表设计器使用指南
  9. 武大计算机学院推免清北,南大2020年推免生来自哪儿?山大73,武大41,清北5人...
  10. python框架 mysql数据库_在Python的框架中为MySQL实现restful接口的教程