Spring Boot XSS 攻击过滤插件使用

Stella981
• 阅读 1218

XSS 是什么

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

xss 攻击流程

Spring Boot XSS 攻击过滤插件使用

简单 xss 攻击示例

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

Spring Boot XSS 攻击过滤插件使用

解决方案

XSS 过滤说明

  • 对表单绑定的字符串类型进行 xss 处理。
  • 对 json 字符串数据进行 xss 处理。
  • 提供路由和控制器方法级别的放行规则。

使用 mica-xss

引入一下 依赖即可

<!--XSS 安全过滤-->
        <dependency>
            <groupId>net.dreamlu</groupId>
            <artifactId>mica-core</artifactId>
            <version>2.0.9-GA</version>
        </dependency>
        <dependency>
            <groupId>net.dreamlu</groupId>
            <artifactId>mica-xss</artifactId>
            <version>2.0.9-GA</version>
        </dependency>

测试 XSS 过滤

测试 GET 参数过滤

测试 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<String,String> 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<String,String> body){
  return body.get("params");
}

原理分析

常见实现剖析

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

    Spring Boot XSS 攻击过滤插件使用

mica-xss 实现

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

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

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

Spring Boot XSS 攻击过滤插件使用

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

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

Spring Boot XSS 攻击过滤插件使用

  1. 核心过滤逻辑

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

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

    • 从 URL,文件或字符串中刮取和解析 HTML
    • 使用 DOM 遍历或 CSS 选择器查找和提取数据
    • 操纵 HTML 元素,属性和文本
    • 清除用户提交的内容以防止安全白名单,以防止 XSS 攻击
    • 输出整洁的 HTML

Spring Boot XSS 攻击过滤插件使用

项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注

点赞
收藏
评论区
推荐文章
李志宽 李志宽
3年前
什么是XSS攻击?XSS攻击有哪几种类型?
前言:网络安全攻击方式有很多种,其中包括XSS攻击、SQL注入攻击、URL篡改等。那么XSS攻击到底是什么?XSS攻击有哪几种类型?今天小编为大家讲解一下。  什么是XSS攻击?XSS攻击又称为跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行。XSS是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的,它
Stella981 Stella981
3年前
1006.Web安全攻防靶场之WebGoat – 2
概述由于上一篇文章Web安全攻防靶场之WebGoat1过长,这里分开写后面内容使用CrossSiteScripting(XSS)跨站脚本攻击,跨站脚本分为三类1\.ReflectedXSSInjection反射型xss通过一个链接产生的xss
可莉 可莉
3年前
1006.Web安全攻防靶场之WebGoat – 2
概述由于上一篇文章Web安全攻防靶场之WebGoat1过长,这里分开写后面内容使用CrossSiteScripting(XSS)跨站脚本攻击,跨站脚本分为三类1\.ReflectedXSSInjection反射型xss通过一个链接产生的xss
Wesley13 Wesley13
3年前
DOM
跨站脚本攻击(Crosssitescripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、偷取密码、传播恶意代码等攻击行为。可以分为反射型、存储型、DOM型等,本文主要讲解DOMXSS漏洞挖掘与攻击面延申。接下来就开门见山,讲解干货吧。DOMXSS典型应用场景
Stella981 Stella981
3年前
Django之XSS攻击
Django之XSS攻击XSS是什么:XSS是跨站脚本攻击。XSS可以获取用户的信息,比如登录凭证Cookie,那样就可以登录用户的账号,但是在django中,XSS是默认阻止的。因为在django中,a标签是字符串类型的。比如在评论中提叫script的代码,会以字符串的形式显示出来。views.
Stella981 Stella981
3年前
Django自身安全机制
XSS攻击什么是XSS攻击XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(https://www.oschina.net/action/GoT
Stella981 Stella981
3年前
HostOnly Cookie 及Js对cookie操作
HostOnlyCookie要理解HttpOnly的作用,要先弄懂XSS攻击,即跨站脚本攻击,大伙可以Google一下看看XSS到底是什么,来自wikipedia的解释:跨网站脚本(Crosssitescripting,通常简称为XSS或跨站脚本或跨站脚本攻击)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。
Wesley13 Wesley13
3年前
信息安全
ylbtech信息安全攻击XSS:XSS/CSS攻击XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、Flash或者甚至是普通的HTML。攻击成功后
欣喜若狂 欣喜若狂
1年前
XSS攻击问题皕杰报表解决方案
XSS表示CrossSiteScripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在XSS攻击中,通过插入恶意脚本,实现对用户游览器的控制。XSS攻击可以分成两种类型:1