【RuoYi-Vue-Plus】学习笔记 44 - XSS 过滤器以及 @Xss 注解简单分析
创始人
2024-02-15 12:01:36
0

文章目录

    • 前言
    • 参考目录
      • 关于 XSS 攻击
    • 框架集成
      • 配置说明
      • 测试方法一:通过过滤器
      • 测试方法二:通过 `@Xss` 注解
    • 功能调用流程分析
      • XSS 过滤器启动初始化
      • Form 表单请求过滤
      • JSON 对象请求过滤
      • `@Xss` 注解校验

前言

之前在对接口进行传参时发现富文本包含的标签全部被过滤掉了,例如:

test

变成了 test,但是框架自带的通知公告方法是正常的,请教了 狮子大佬 后才知道原来是因为 XSS 过滤。这个其实是很早之前框架就带上的功能,一开始不知道是做什么的,后面就忘记了,所以本文来简单分析一下。

参考目录

关于 XSS 攻击

  • 前端安全系列(一):如何防止XSS攻击?
  • 这一次,彻底理解XSS攻击

框架集成

配置说明

关于 XSS 过滤功能是通过过滤器来实现的,相关的配置如下表:

方法 / 类 名称功能
com.ruoyi.common.filter.XssFilter防止 XSS 攻击的过滤器
com.ruoyi.framework.config.properties.XssPropertiesXSS 过滤器配置对象
com.ruoyi.framework.config.FilterConfig#xssFilterRegistration注册 XSS 过滤器
com.ruoyi.common.filter.XssHttpServletRequestWrapperXSS 过滤处理请求包装类
com.ruoyi.common.xss.Xss自定义 XSS 校验注解
com.ruoyi.common.xss.XssValidator自定义 XSS 校验注解实现

详细的代码就不一一贴出来了,可以到相关类中进行查看。

框架中对于 XSS 的过滤有两种方式:

  • 方式一:application.yml 配置
  • 方式二:@Xss 注解

下面会通过 demo 的方式对这两种方式进行简单分析。

测试方法一:通过过滤器

application.yml 配置:
在这里插入图片描述

TestDemoController 测试接口:
在这里插入图片描述

在 XSS 过滤处理请求包装类 XssHttpServletRequestWrapper 中对于不同类型的请求参数使用的过滤方法不同,所以此处进行分开。

@SaIgnore 注解是 Sa-Token 忽略鉴权注解,可以不需要登录获取 Token 直接请求接口。

TestDemoController#testXss 请求结果:
在这里插入图片描述

TestDemoController#testXss2 请求结果:
在这里插入图片描述

测试方法二:通过 @Xss 注解

关于 @Xss 注解使用可以参考若依官方文档(传送门)。

文档中是对请求对象中的参数加上注解,可以参考框架 SysUser 对象。

测试接口简化了写法,直接对 Form 表单参数进行校验:
在这里插入图片描述

需要注意的是,对参数的校验会在 Xss 过滤器过滤之后,进行注解校验测试时,不用打开 Xss 过滤器或者将配置文件中的过滤链接去掉。

TestDemoController#testXss3 请求结果:
在这里插入图片描述

功能调用流程分析

XSS 过滤器启动初始化

首先根据配置中的条件注册过滤器:

FilterConfig#xssFilterRegistration
在这里插入图片描述

根据配置保存需要排除的接口:

XssFilter#init
在这里插入图片描述

Form 表单请求过滤

测试方法一中的第一个方法:

请求接口为 /demo/demo/testXss
在这里插入图片描述

XssFilter#doFilter
在这里插入图片描述

过滤器会匹配是否是需要排除的接口。

在这里插入图片描述

进入包装类过滤:
XssHttpServletRequestWrapper#getParameterValues
在这里插入图片描述

过滤方法:
在这里插入图片描述

返回过滤后的参数:
在这里插入图片描述

JSON 对象请求过滤

测试方法一中的第二个方法:

请求接口为 /demo/demo/testXss2
在这里插入图片描述

XssFilter#doFilter
在这里插入图片描述

同上,也会对接口进行匹配,看是否需要放行。

在这里插入图片描述

接着进入包装类方法过滤标签:
XssHttpServletRequestWrapper#getInputStream
在这里插入图片描述

过滤后:
在这里插入图片描述

@Xss 注解校验

测试方法二中的方法:

请求接口为 /demo/demo/testXss3
在这里插入图片描述

校验方法:
XssValidator#isValid
在这里插入图片描述

校验结果:
在这里插入图片描述

校验不通过,返回异常信息。

(完)

相关内容

热门资讯

法国内政部网络系统遭入侵:数据... 大象新闻2025-12-17 23:06:30 法国内政部长洛朗·努内兹17日接受法国新闻广播电台采...
北京市永定河保护条例 北京市人民代表大会常务委员会公告 〔十六届〕第47号 《北京市永定河保护条例》已由北京市第十六届人民...
专访海南社科院王艳婷:从“打开... 12月18日,海南即将启动全岛封关运作,成为中国对外开放历程中的一个里程碑事件。 在此背景下,海南省...
《北京市永定河保护条例》解读 2025年11月28日,北京市第十六届人民代表大会常务委员会第二十次会议通过了《北京市永定河保护条例...
有研粉材(688456)披露拟... 截至2025年12月17日收盘,有研粉材(688456)报收于51.4元,较前一交易日上涨0.39%...
工会法援服务站提供“一站式”维... 来源:滚动播报 (来源:工人日报) 本报讯 (记者张嫱 通讯员匡润金)山东青岛职工李某和杨某在某商场...
微创光电(920198)披露公... 截至2025年12月17日收盘,微创光电(920198)报收于10.2元,较前一交易日下跌1.26%...
哈尔滨240小时免签政策落地一... “终于能体验零下20摄氏度的哈尔滨了!”搭乘日本航班抵哈的印尼旅客黄女士难掩兴奋。自2024年12月...
交通事故致人死亡赔偿能拿多少钱... 大家好!今天我们聊一个沉重但又必须面对的话题:**交通事故导致死亡,家属能拿到多少钱赔偿?**这个问...
ST新华锦(600735)披露... 截至2025年12月17日收盘,ST新华锦(600735)报收于4.8元,较前一交易日上涨0.21%...