码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【RuoYi-Vue-Plus】学习笔记 44 - XSS 过滤器以及 @Xss 注解简单分析


    文章目录

      • 前言
      • 参考目录
        • 关于 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
    在这里插入图片描述

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

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

    (完)

  • 相关阅读:
    Thoughtworks 全球CTO:按需求构建架构,过度工程只会“劳民伤财”
    老卫带你学---leetcode刷题(215. 数组中的第K个最大元素)
    [车联网安全自学篇] 五十二. Android安全之本地存储敏感信息挖掘【二】
    java8 新特性 -Optional的常见用法
    文本处理三剑客 sed 、awk 、grep
    股权项目披露:扬州国扬电子有限公司6.2664%股权转让
    mac下php81安装swoole报错fatal error: ‘pcre2.h‘ file not found
    探讨MySQL存储过程返回记录集
    Vue 2.0——初识组件
    【DC-DC升压电推剪方案】FP6277,FP6296电源升压芯片在电推剪中扮演着一个怎样的角色?带你深入了解电推剪的功能和应用及工作原理
  • 原文地址:https://blog.csdn.net/Michelle_Zhong/article/details/128038325
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号