当前位置: 首页 > news >正文

存储型XSS漏洞

1.介绍

存储型XSS攻击是一种常见的网络攻击,也称为持久型XSS攻击。与反射型XSS攻击不同,存储型XSS攻击将恶意代码存储在服务器端或数据库中,当其他用户访问该网页时,恶意代码会被执行,导致用户的信息被窃取或造成其他安全问题。
存储型XSS攻击的原理是利用网页的输入和输出漏洞,将恶意代码插入到网页中。当用户访问该网页时,恶意代码会被执行,并窃取用户的浏览器信息、Cookie等敏感数据。这些数据可以被攻击者用来进行更深入的攻击,例如身份盗用、钓鱼攻击等。
存储型XSS攻击的危害非常严重。攻击者可以利用这种漏洞进行各种恶意操作,例如窃取用户的个人信息、篡改网页内容、种植恶意软件等。这种攻击对网站的用户和开发者都可能造成巨大的损失。
为了防御存储型XSS攻击,可以采用以下几种方法:

  1. 对用户输入进行验证和过滤。在将用户输入的数据插入到网页中之前,应该对数据进行严格的验证和过滤,确保其中不包含任何恶意代码。可以使用白名单验证、HTML清理器等工具来帮助验证和过滤数据。
  2. 对输出数据进行适当的编码。当将数据输出到网页中时,应该对数据进行适当的编码,例如HTML编码或JavaScript编码,以防止恶意代码被执行。
  3. 使用安全的Cookie设置。Cookie是网站用于存储用户信息的常见方式。为了防止Cookie被利用进行XSS攻击,应该设置安全的Cookie属性,例如HttpOnly和Secure。
  4. 使用最新的安全库和框架。一些现代的Web开发框架和库已经内置了一些安全措施,可以帮助防止存储型XSS攻击。使用这些最新的框架和库可以大大降低受到攻击的风险。
  5. 定期进行安全审计和测试。定期对网站进行安全审计和测试可以帮助发现潜在的安全漏洞,并及时修复漏洞。
    总结起来,存储型XSS攻击是一种常见的网络攻击,对网站的用户和开发者都可能造成巨大的损失。为了防御这种攻击,应该采取多种方法来保护网站的安全。同时,作为Web开发者,应该了解并掌握Web安全的原理和防护措施,以确保开发出的网站具有足够的安全性。

2.漏洞演示

使用postman 插入数据,数据中存在 html 字符串  

<img src=1 οnerrοr=\"alert(/xss/)\"/>

页面访问

数据插入成功之后,在列表和详情页打开会弹出 异常提示.

3.处理方案

mica-xss介绍

mica-xss 是一个基于 Java 的库,旨在帮助开发者防御 XSS(跨站脚本攻击)。在 Spring Boot 应用程序中使用 mica-xss 可以自动处理请求参数、JSON 请求体和路径变量中的 XSS 攻击,从而提高应用程序的安全性。以下是如何在 Spring Boot 应用中集成和使用 mica-xss 的步骤:

首先,需要在项目的 pom.xml 文件中添加 mica-xss 的依赖。
<!--        xss漏洞处理-->
<dependency><groupId>net.dreamlu</groupId><artifactId>mica-xss</artifactId><version>2.1.1-GA</version>
</dependency>

配置 mica-xss

在 Spring Boot 项目中,通常通过配置文件(如 application.properties 或 application.yml)和 Java 配置类来配置 mica-xssmica-xss 提供了一些配置选项,允许你自定义哪些路径应该进行 XSS 清理,以及是否应该清理请求体、请求参数等。

以下是一个配置示例

#xss 防护
mica:xss:# 开启xss,默认开启enabled: true# # 【全局】是否去除文本首尾空格trim-text: true# 模式:clear 清理(默认),escape 转义mode: escape# clear专用 prettyPrint,默认关闭: 保留换行pretty-print=false# 拦截的路由,例如: /api/order/**path-exclude-patterns: /ai/**,/finance-apply-guarantee/**,/finance-apply-innovate/**,/finance-apply-loan/**,/finance-need-creditor/**,

4.使用效果

后续使用postman 执行相同的curl请求, 保存在数据库中的数据展示.

PS:可能会遇见一些其他问题,

输入的业务特殊字符  例如:<  >   &  等  存储进数据库时是转义后的

a.需要扩充数据库字段长度.

b.返回给前端的内容也是转义后的,需要前端同学反转义展示.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux系统flatpak的简单设置
  • 牛客周赛 Round 58(上)
  • 文心快码前端工程师观点分享:如何保证在企业内落地?
  • 【数学建模】2024数学建模国赛经验分享
  • 无线会议解决方案
  • 石头科技闪耀IFA百年展:斩获多项大奖,全球知名媒体一致好评
  • 10个C++绘图案例
  • 【大模型专栏—入门篇】CUDA入门与AutoDL“炼丹”
  • 34465A-61/2 数字万用表(六位半)
  • 爬虫基础知识+豆瓣电影实战
  • 《数据结构(C语言版)第二版》第八章-排序(8.5-归并排序、8.6基数排序)
  • 苹果iOS/ iPadOS18 RC 版、17.7 RC版更新发布
  • Docker容器管理的10个基础命令
  • 区块链媒体:区块链媒体套餐倾心推广解析!
  • kafka单条消息过大发送失败
  • 【347天】每日项目总结系列085(2018.01.18)
  • avalon2.2的VM生成过程
  • C学习-枚举(九)
  • ES6语法详解(一)
  • Java多态
  • js操作时间(持续更新)
  • Linux中的硬链接与软链接
  • Vue.js源码(2):初探List Rendering
  • WePY 在小程序性能调优上做出的探究
  • 多线程 start 和 run 方法到底有什么区别?
  • 构建二叉树进行数值数组的去重及优化
  • 规范化安全开发 KOA 手脚架
  • 猴子数据域名防封接口降低小说被封的风险
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 驱动程序原理
  • 微服务核心架构梳理
  • raise 与 raise ... from 的区别
  • ​马来语翻译中文去哪比较好?
  • $.ajax,axios,fetch三种ajax请求的区别
  • (27)4.8 习题课
  • (3) cmake编译多个cpp文件
  • (6)STL算法之转换
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二开)Flink 修改源码拓展 SQL 语法
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (实战篇)如何缓存数据
  • (四)c52学习之旅-流水LED灯
  • (一)、python程序--模拟电脑鼠走迷宫
  • (转)Sublime Text3配置Lua运行环境
  • (转载)深入super,看Python如何解决钻石继承难题
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .cfg\.dat\.mak(持续补充)
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)