【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
在这里插入图片描述

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

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

(完)

相关内容

热门资讯

有韩国大学生被犯罪团伙折磨致死... 据参考消息援引韩联社10月12日报道,韩国总统李在明11日就柬埔寨接连发生针对韩国公民的招聘诱骗、绑...
因承揽合同纠纷,欧派家居起诉上... 天眼查APP显示,近日,欧派家居集团股份有限公司新增一则开庭公告,案由为“承揽合同纠纷”,原告为欧派...
因买卖合同纠纷,国电南瑞起诉祥... 天眼查APP显示,近日,国电南瑞科技股份有限公司新增一则开庭公告,案由为“买卖合同纠纷”,原告为国电...
因侵害商标权纠纷,上海家化起诉... 天眼查APP显示,近日,上海家化联合股份有限公司新增一则开庭公告,案由为“侵害商标权纠纷”,原告为上...
政策转向不改增长韧性 储能产业... “储能行业从政策驱动转向市场自发驱动”“海外市场成为新的增长极”“技术从粗放型向精细化转型”……10...
男子坚持AA妻子打欠条上热搜 ... 近日,“男子坚持AA妻子手术要打欠条”话题登上热搜,引发大量讨论。 红星新闻记者搜索过往判例看到,曾...
佛山地区:资深法律人金辉多领域... "在法治社会不断发展的进程中,专业法律人士的重要性愈发凸显,他们不仅为公民和企业的合法权益保驾护航,...
加多宝和王老吉大健康 商标诉讼... [ 2025年上半年,王老吉大健康公司收入65亿元,同比增长8.4%,实现净利润约13亿元,同比增长...
战火再升级!中国高速传动“怒轰... 10月12日,中国高速传动(00658)发布措辞强硬的公告,严正谴责大股东丰盛控股(00607)两日...
建信信托与华闻金诚债务纠纷,迎... 建信信托与海南华闻金诚投资有限公司(原名“山南华闻创业投资有限公司”,简称“华闻金诚”)之间的债务纠...