【RuoYi-Vue-Plus】学习笔记 44 - XSS 过滤器以及 @Xss 注解简单分析

news2025/7/22 11:14:46

文章目录

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

前言

之前在对接口进行传参时发现富文本包含的标签全部被过滤掉了,例如:<h1>test</h1> 变成了 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
在这里插入图片描述

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

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

(完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

成功解决 java.lang.NumberFormatException

急于查看问题原因的小伙伴&#xff0c;直接跳到 问题原因 标题。 问题背景&#xff1a; 今天在写条件查询时遇到这么一个错&#xff1a; ### Error querying databasecause: java.lang.NumberFormatException: For input string: "M ### Cause: iava.lang.NumberFormatE…

Ros驱动Ur5e过程 | 手把手教程 | Ros驱动真实机器人Ur5e | Ros与Ur5e建立通讯 | Ubuntu20.04驱动Ur5e机器人

目录 UR5e连接过程 安装ROS 安装moveit 电脑端UR机器人驱动安装 UR实体机器人-软件安装与通信建立 urcap软件安装 电脑端ip问题 需要指定临时ip的情况 不需指定临时ip UR机器人IP 机器人的启动 驱动UR机器人 电脑-ip : 192.168.56.1 ur5e-ip &#xff1a;192.168.5…

【STM32CubeMX】NRF24L01模块实现“1对1“及“1对多“无线通信

大家好&#xff0c;我是小政。本篇文章我将针对NRF24L01模块实现"1对1"及"1对多"无线通信的STM32CubeMX配置过程进行详细的讲解&#xff0c;让准备学习HAL库的小伙伴能够更好的理解STM32CubeMX如何配置。 NRF24L01模块实现"1对1"及"1对多&q…

【OpenCV-Python】教程:3-9 轮廓(5)轮廓层级

OpenCV Python 轮廓层次 【目标】 学习轮廓的层次关系 在前几个课程里面&#xff0c;学习了 cv2.findContours() 函数, 传递了参数 Contour Retrieval Mode . 通常是 cv.RETR_LIST or cv.RETR_TREE 工作的很好&#xff0c;但是他们是什么意思呢&#xff1f; hierarchy 到底是…

基于DMF推荐算法的推荐系统 代码+数据 (可作为毕设)

案例知识点 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。DMF推荐方法…

C语言既然可以自动为变量分配内存,为什么还要用动态分配内存呢?

一、前言 不知道大家在学习C语言动态分配内存的时候有没有过这样的疑问&#xff0c;既然系统可以自动帮我们分配内存&#xff0c;为什么还需要我们程序员自己去分配内存呢&#xff1f; 如果想要弄清楚这些问题&#xff0c;我们首先就要了解静态内存和动态内存有什么区别&…

python学习笔记

第一个python程序 pycharm使用 pycharm下载链接&#xff1a; https://www.jetbrains.com/zh-cn/pycharm/download/#sectionwindows 1. 新建项目 右键test—> 点击new 输入文件名 运行 结果 2. 调节字体大小快捷键设置 右键添加鼠标快捷键 按住ctrl鼠标向上滑动 放…

计算机网络 应用层

概述 为特定应用程序提供数据服务&#xff0c;例如HTTP、FTP(File Transfer Protocol , 文件传输协议)、DNS &#xff08;Domain Name System,域名系统&#xff09;等。 域名系统 DNS DNS 全名叫 Domain Name Server&#xff0c;中文俗称“域名服务器” 在 Internet 上域名…

Docker搭建Nginx实现SpringBoot+Nginx集群

1&#xff0c;首先聊聊什么Nginx&#xff1f; Nginx 是一个高性能的HTTP和反向代理web服务器&#xff0c;因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日&#xff0c;nginx 1.0.4发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电…

linux三剑客awk、sed、grep与cut的总结

在Linux中&#xff0c;一切皆文件&#xff0c;对Linux的操作就是对文件的处理。对文件操作处理最重要的三个命令是grep、sed、awk&#xff0c;它们在业界被称为“三剑客”。 三剑客的功能非常强大&#xff0c;但它们各自有分别擅长的功能&#xff1a; grep擅长对文件或字符串进…

【操作系统】2.3 进程同步与互斥

这一节大概是操作系统中最难的一节了。 2.3.1 进程的同步与互斥 2.3.1 进程的同步与互斥_StudyWinter的博客-CSDN博客_进程同步思维导图 进程同步&#xff1a;在多道程序环境下&#xff0c;进程是并发执行的&#xff0c;不同进程之间存在着不同的相互制约关系。为了协调进程之…

C#界面里Form.Language 属性的使用

C#界面里Form.Language 属性的使用 现在面向全球化的应用软件、应用系统越来越多。 比如游戏正在走向全球化时代,很多游戏的服务器也会安装到各个国家去,也会请当地人来管理游戏的服务器。 这时开发的软件,就需要面向各种语言,比如英语、日语、阿拉佰语等等。 如果你正在…

什么叫共同富裕,刘强东给老板们打了个样

这两天&#xff0c;热搜上最火的男人&#xff0c;除了汪小菲&#xff0c;就是刘强东无疑了。 11月22日&#xff0c;刘强东发出了一封京东内部员工信&#xff0c;引发热议。 信里主要说了4点&#xff1a; 1、自明年1月1日起&#xff0c;为所有德邦员工缴齐五险一金&#xff1…

YOLOv5识别图像内苹果和香蕉

YOLOv5为目标检测带来了极大的方便。通过简单地训练YOLOv5&#xff0c;即可以实现一个速度快、性能高的目标检测系统。 下面介绍如何从头开始构造一个简单的目标检测系统&#xff0c;用来识别图像内的苹果和香蕉&#xff0c;并标注他们所在的位置。 特别强调的是&#xff0c;…

HTML5学习笔记(三)

离线应用 HTML5新增了一个离线存储的API&#xff0c;用于实现本地数据的缓存&#xff0c;从而使得开发离线应用成为可能。 所谓“离线存储”&#xff0c;指的是建立一个URL列表&#xff0c;该列表可以包含HTML文件、CSS文件、JavaScript文件和图片等。当与服务器建立连接时&am…

dragTabs(vue)

vue实现tabs拖拽 效果图 dragTab.vue <template><div class"yh-tabs"><draggable :list"tabList" :group"groupName" animation"300" item-key"id" end"dragEnd"><template #item"{ …

CANoe-vTESTstudio之Test Diagram编辑器(功能介绍)

1. 阶段 Test Diagram从测试设计到测试执行,分为5个阶段: Test Design 在测试设计阶段,测试设计人员使用图形元素和分配的测试代码对测试用例进行建模。这个阶段的结果是生成一个测试图表 Evaluation 生成的测试图表,需要评估其正确性。在评估期间,将验证各个元素及其…

3.7 学会这2招,让你的笔记分分钟上热门 【玩赚小红书】

什么是上热门&#xff1f; 上热门之前&#xff0c;我们先了解一下什么是上热门。上热门就是笔记被系统主动推荐&#xff0c;并在很长一段时间里&#xff0c;有源源不断的粉丝点赞、收藏&#xff0c;相当于平台给你的笔记开了专属流量口&#xff0c;推送给那些平常关注该笔记类型…

vue实战项目之vue-cli脚手架搭建过程详解

目录 1.可以参考vue-cli的中文文档进行下载安装 2.查看node和npm版本 3.安装依赖包 4.依赖包以前版本太老&#xff0c;如何更新&#xff1f; 5.创建一个项目 6.图形化界面 1.可以参考vue-cli的中文文档进行下载安装 vue-cli中文文档 2.查看node和npm版本 在cmd或者编译…

【数据库原理及应用】——关系数据库的规范化理论(学习笔记)

&#x1f4d6; 前言&#xff1a;关系数据库的规范化理论是数据库设计的一个理论指南&#xff0c;提供了判断一个关系模式优劣的理论依据。本章讨论的关系数据库的规范化理论主要包含三方面内容&#xff1a;函数依赖、范式和模式分解准则。函数依赖起着核心作用&#xff0c;是模…