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

XSS 安全漏洞介绍及修复方案

简介

XSS(Cross Site Scripting)是一种常见的 Web 安全漏洞,攻击者通过在网页中注入恶意脚本代码,使得网页在用户端执行这些脚本,从而窃取用户信息或者进行其他恶意操作。为了防止 XSS 攻击,可以使用正则表达式对用户输入的数据进行过滤和清理。


XSS 攻击的原理

XSS 攻击通常包含以下几个步骤:

  1. 攻击者在目标网页中注入恶意的脚本代码。
  2. 用户访问目标网页时,浏览器会解析并执行这些恶意代码。
  3. 恶意代码在用户的浏览器中执行,可以获取用户的敏感信息或者进行其他恶意操作。

为了防止 XSS 攻击,需要对用户输入的数据进行过滤和清理,确保其中不包含恶意的脚本代码。


XSS 的分类

  • 反射型 XSS:也称为非持久性 XSS,是最常见的一种 XSS

    XSS 代码常常出现在 URL 请求中,当用户访问带有 XSS 代码的 URL 请求时,服务器端接收请求并处理,然后将带有 XSS 代码的数据返回给浏览器,浏览器解析该段带有 XSS 代码的数据并执行,整个过程就像一次反射,故称为反射型 XSS。

    该类攻击的主要特点是它的及时性和一次性,即用户提交请求后,响应信息会立即反馈给用户。该类攻击常发生在搜索引擎、错误提示页面等对用户的输入做出直接反应的场景中。

  • 存储型 XSS:也称为持久性 XSS

    在存储型 XSS 中,XSS 代码被存储到服务器端,因此允许用户存储数据到服务器端的 Web 应用程序可能存在该类型 XSS 漏洞。攻击者提交一段 XSS 代码后,服务器接收并存储,当其他用户访问包含该 XSS 代码的页面时,XSS 代码被浏览器解析并执行。

    存储型 XSS 攻击的特点之一是提交的恶意内容会被永久存储,因而一个单独的恶意代码就会使多个用户受害,故被称为持久性 XSS,它也是跨站脚本攻击中危害最的一类。二是被存储的用户提交的恶意内容不一定被页面使用,因此存在危险的响应信息不一定被立即返回,也许在访问那些在时间上和空间上没有直接关联的页面时才会引发攻击,因此存在不确定性和更好的隐蔽性。

    这类攻击的一个典型场景是留言板、博客和论坛等,当恶意用户在某论坛页面发布含有恶意的 Javascript 代码的留言时,论坛会将该用户的留言内容保存在数据库或文件中并作为页面内容的一部分显示出来。当其他用户查看该恶意用户的留言时,恶意用户提交的恶意代码就会在用户浏览器中解析并执行。

  • DOM 型 XSS:DOM (Document Objet Model) 指文档对象模型

    DOM 常用来表示在 HTML 和 XML 中的对象。DOM 可以允许程序动态的访问和更新文档的内容、结构等。客户端 JavaScript 可以访问浏览器的文档对象模型。也就是说,通过 JavaScript 代码控制 DOM 节点就可以不经过服务器端的参与重构 HTML 页面。

    该类攻击是反射型 XSS 的变种。它通常是由于客户端接收到的脚本代码存在逻辑错误或者使用不当导致的。比如 Javascript 代码不正确地使用各种 DOM 方法(如 document.write)和 Javascript 内部函数(如 eval 函数),动态拼接 HTML 代码和脚本代码就容易引发 DOM 型的跨站脚本攻击。

    因此,DOM 型 XSS 与前面两种 XSS 的区别就在于 DOM 型 XSS 攻击的代码不需要与服务器端进行交互,DOM 型 XSS 的触发基于浏览器端对 DOM 数据的解析来完成,也就是完全是客户端的事情。


修复方案

方案1:hotool 工具

注:该方案可以通过奇安信的代码扫描:在 controller 层把请求对象和返回对象都使用该方式进行过滤

依赖引入

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26</version>
</dependency>

代码

// 清除所有HTML标签,但是不删除标签内的内容
String s = HtmlUtil.cleanHtmlTag("<ddd>ddsfsd</ddd>");
// 清理对象中所有属性值的所有HTML标签,但是不删除标签内的内容
User userNew = JSONObject.parseObject(HtmlUtil.cleanHtmlTag(JSON.toJSONString(userOld)), User.class);

方案2:过滤 XSS 攻击的正则表达式代码

注:该方案并不能通过奇安信的代码扫描

public class XssFilter {public static final String HTML_REGEX = "<[^>]*>";public static final String SPECIAL_CHAR_REGEX = "[\\&|\\<|\\>|\\'|\\\"|\\%|\\;|\\(|\\)|\\+]";public static final String JS_REGEX = "javascript:";/*** 组合过滤*/public static String filterGroup(String inputText) {if (null == inputText) return inputText;return filterJS(filterSpecialChar(filterHTML(inputText)));}/*** 过滤HTML标签*/public static String filterHTML(String inputText) {if (null == inputText) return inputText;return inputText.replaceAll(HTML_REGEX, "");}/*** 过滤特殊字符*/public static String filterSpecialChar(String inputText) {if (null == inputText) return inputText;return inputText.replaceAll(SPECIAL_CHAR_REGEX, "");}/*** 过滤JavaScript代码*/public static String filterJS(String inputText) {if (null == inputText) return inputText;return inputText.replaceAll(JS_REGEX, "");}
}

相关文章:

XSS 安全漏洞介绍及修复方案

简介 XSS&#xff08;Cross Site Scripting&#xff09;是一种常见的 Web 安全漏洞&#xff0c;攻击者通过在网页中注入恶意脚本代码&#xff0c;使得网页在用户端执行这些脚本&#xff0c;从而窃取用户信息或者进行其他恶意操作。为了防止 XSS 攻击&#xff0c;可以使用正则表…...

基于STM32的智能仓库管理系统

目录 引言环境准备智能仓库管理系统基础代码实现&#xff1a;实现智能仓库管理系统 4.1 数据采集模块4.2 数据处理与分析4.3 通信模块实现4.4 用户界面与数据可视化应用场景&#xff1a;仓库管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓库管理系统通过使用STM32嵌…...

LeetCode —— 只出现一次的数字

只出现一次的数字 I 本题依靠异或运算符的特性&#xff0c;两个相同数据异或等于0&#xff0c;数字与0异或为本身即可解答。代码如下: class Solution { public:int singleNumber(vector<int>& nums) {int ret 0;for (auto e : nums){ret ^ e;}return ret;} };只出…...

python遍历文件夹中所有图片

python遍历文件夹中的图片-CSDN博客 这个是之前的版本&#xff0c;现在这个版本会更好&#xff0c;直接进来就在列表中 path glob.glob("1/*.jpg")print(path)print(len(path))path_img glob.glob("1/*.jpg")path_img.extend(path)print(len(path_img))…...

速盾:DDOS能打死高防ip吗?

DDoS攻击是一种利用大量计算机或设备发起的分布式拒绝服务攻击。它的目标是通过发送大量流量或请求&#xff0c;使目标服务器或网络资源无法正常工作。高防IP是一种具有强大防御能力的网络服务&#xff0c;能够抵御各种形式的网络攻击&#xff0c;包括DDoS攻击。然而&#xff0…...

3dsMax怎样让渲染效果更逼真出色?三套低中高参数设置

渲染是将精心构建的3D模型转化为逼真图像的关键步骤。但要获得令人惊叹的渲染效果&#xff0c;仅仅依赖默认设置是不够的。 实现在追求极致画面效果的同时&#xff0c;兼顾渲染速度和时间还需要进行一些调节设置&#xff0c;如何让渲染效果更加逼真&#xff1f; 一、全局照明与…...

Android的OverlayFS原理与作用

标签: OverlayFS; Android;Overlay Filesystem; Android的OverlayFS原理与作用 概述 OverlayFS(Overlay Filesystem)是一种联合文件系统,允许将一个或多个文件系统叠加在一起,使它们表现为一个单一的文件系统。Android系统利用OverlayFS来实现动态文件系统的叠加和管…...

奇点临近:人类与智能时代的未来

在信息爆炸的时代&#xff0c;我们每天都被海量的信息所淹没&#xff0c;如何才能在这个嘈杂的世界中找到真正有价值的信息&#xff1f;如何才能利用信息的力量&#xff0c;提升我们的认知水平&#xff0c;重塑我们的未来&#xff1f; 这些问题的答案&#xff0c;或许都能在雷…...

NAS教程丨铁威马如何登录 SSH终端?

适用型号&#xff1a; 所有TNAS 型号 如您有特殊操作需要通过 SSH 终端登录 TNAS&#xff0c;请参照以下指引&#xff1a; (注意: 关于以下操作步骤中的"cd /"的指令,其作用是使当前 SSH/Telnet 连接的位置切换到根目录,以免造成对卷的占用.请不要遗漏它.) Windows…...

2024-06-24 百度地图的使用及gps定位坐标获取

1.百度地图的使用教程 2. 定位功能的实现 第一种&#xff1a;通过h5自带定位获取当前gps坐标 var options {enableHighAccuracy: true,timeout: 5000,maximumAge: 0};function success(pos) {var crd pos.coords;alert(crd.latitude---crd.longitude---crd.accuracy);conso…...

Python二级考试试题②

1. 以下关于程序设计语言的描述&#xff0c;错误的选项是&#xff1a; A Python语言是一种脚本编程语言 B 汇编语言是直接操作计算机硬件的编程语言 C 程序设计语言经历了机器语言、汇编语言、脚本语言三个阶段 D 编译和解释的区别是一次性翻译程序还是每次执行时都要翻…...

安装和使用nvm安装Nodejs

文章目录 安装和使用 nvm1. 安装 nvm2. 重新加载终端配置3. 安装所需的 Node.js 版本4. 使用安装的 Node.js 版本 nvm 常用命令 安装和使用 nvm 以下是安装 nvm 并使用它来安装 Node.js 的步骤&#xff1a; 1. 安装 nvm 首先&#xff0c;您需要安装 nvm。您可以使用 curl 或…...

非遗!四川省21市非遗大师工作室申报认定条件程序和认定补贴经费支持(管理办法)

第一章总则 第一条贯彻落实中共中央办公厅、国务院办公厅《关于进一步加强非物质文化遗产保护工作的意见》&#xff08;厅字〔2021〕31号&#xff09;、四川省文化和旅游厅等12部门《关于进一步加强非物质文化遗产保护工作的实施意见》&#xff08;川文旅发〔2022〕25号&#…...

uni-app系列:uni.navigateTo传值跳转

文章目录 1. 使用URL参数2. 使用页面栈注意事项&#xff1a;uni.navigateTo API 参数详细说明回调函数参数 在uni-app中&#xff0c;如果想要通过uni.navigateTo方法跳转到另一个页面并传递参数&#xff0c;可以使用页面路由的URL参数或者页面栈的方式来传递。但是&#xff0c;…...

6.3万美刀BTC的车还能上吗?

原创 | 刘教链 隔夜BTC接连下挫&#xff0c;一度击穿63k(6.3万美刀)。[昨夜6.23内参说到了几个导致近期行情低迷的原因&#xff0c;比如&#xff0c;仅6月份以来&#xff0c;BTC矿工们就以一年来最快的速度&#xff0c;向市场倾泻了几十亿美刀的现货]。 其实&#xff0c;矿工慌…...

在 Vue 3 中设置 `@` 指向根目录的方法汇总

在 Vue 3 项目开发中&#xff0c;为了方便管理和引用文件路径&#xff0c;设置 指向根目录是一项常见的需求。以下为您总结了几种常见的实现方式。 方法一&#xff1a;使用 Vite 配置&#xff08;适用于 Vite 构建的项目&#xff09; 在项目根目录创建 vite.config.js 文件&a…...

基于 NXP LS1046 +FPGA系列 CPCI 架构轨道交通专用板卡

基于 NXP LS1046 系列 CPCI 架构轨道板卡 该产品是一款 CPCI 无风扇架构的高可靠性板卡&#xff0c;CPU 选用 NXP LS1046A 系统平台&#xff0c;支持嵌入式 Linux 或者标准 Ubuntu Linux 、凝思等操作系统&#xff0c;轨道交通 EMC 及宽温级别设计&#xff0c;板载多路 M12 高速…...

快速上手 Spring Boot:基础使用详解

快速上手 Spring Boot&#xff1a;基础使用详解 文章目录 快速上手 Spring Boot&#xff1a;基础使用详解1、什么是SpringBoot2、Springboot快速入门搭建3、SpringBoot起步依赖4、SpringBoot自动配置&#xff1a;以tomcat启动为例5、SpringBoot基础配置6、yaml7、多环境开发配置…...

react学习——08三点运算符

1、代码 let arr1[1,3,5,7,9]let arr2[2,4,6,8,10]console.log(...arr1);//展开一个数组let arr3[...arr1,...arr2]//连续数组//在函数中使用function sum (...numbers){console.log(,numbers)numbers.reduce((previousValue,currentValue)>{return previousValuecurrentVa…...

腾讯云OpenCloudOS系统上安装MySQL

在腾讯云OpenCloudOS系统上安装MySQL&#xff0c;可以通过以下步骤进行&#xff1a; 更新软件包列表&#xff1a; sudo yum update -y 安装MySQL服务器&#xff1a; sudo yum install mysql-server -y 启动MySQL服务&#xff1a; sudo systemctl start mysqld 设置MySQL…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...