XSS 基本概念和原理介绍

XSS 基本概念和原理介绍

基本概念

跨站脚本攻击 XSS(Cross Site Scripting),为了不和层叠样式表 ( Cascading Style Sheets,CSS ) 的缩写混淆,故将跨站脚本攻击缩写为 XSS。
恶意攻击者 往 Web 页面里插入恶意 JavaScript 代码,当用户浏览该页面时,嵌入在 Web 里面的 JS 代码会被解析执行,从而达到恶意攻击用户的目的。
在一个 Web 页面上,有一种很常见的功能是将用户输入的内容输出到页面上。

如果这里输入的内容是一段经过构造的 JS 代码,提交之后再次访问这个页面时,用户就会获取该 JS 代码在浏览器端执行的结果。

通过构造其他相应的代码,攻击者可以执行更具危害的操作。

实施 XSS 攻击需要具备两个条件:

  1. 能够向 Web 页面注入恶意代码;
  2. 这些恶意代码能够被浏览器成功执行。

XSS 分类

XSS 攻击方法主要分为 3 类,分别是 反射型 XSS ,**存储型 XSS **和基于的 DOM 的 XSS。

反射型

特点 :恶意脚本通过 URL 传递并在页面上立即执行。
攻击方式 :攻击者诱导用户点击一个包含恶意代码的链接,恶意代码被浏览器执行。
示例:当用户点击一个包含恶意脚本的链接时,服务器将恶意脚本反射回用户的浏览器并立即执行。
非持久型常见的就是在 URL 中构造,将恶意链接发送给目标用户。当用户访问该链接时候,会向服务器发起一个 GET 请求来提交带有恶意代码的链接。造成反射型 XSS 主要是 GET 类型。

反射型 XSS 完整的攻击流程:

A 和 B 表示的是用户和网站正常通信,从 C 开始就是 XSS 攻击的整个流程。

首先:

  • C:黑客向用户发送了一个有恶意脚本的 URL。
  • D:用户点击之后且登录了 Website 。
  • E:服务器返回了恶意脚本的响应。
  • F:恶意脚本在浏览器执行之后,向黑客已经部署的服务器上发送敏感信息。
  • G:黑客前往黑客服务器获取到用户的敏感信息。
  • H:黑客获取到了用户的敏感信息。
  • I:黑客利用已经获取的敏感信息向 Website 发起请求,伪装成用户进行非法操作。

以上就是 反射型XSS 的整体攻击环节。

存储型

特点 :恶意脚本存储在目标服务器的数据库中,并在用户访问相关页面时执行。
攻击方式 :攻击者将恶意代码输入到网站的某个输入表单中,代码被存储在服务器上,其他用户访问该页面时恶意代码被执行。
示例:攻击者在论坛或评论区发布含有恶意脚本的帖子,其他用户查看该帖子时恶意脚本被执行。
持久型常见的就是在 博客留言板、反馈投诉、论坛评论 ,可以将恶意代码和正文都存入服务器的数据库。每次访问都会触发恶意代码。 例如: <srcipt>alert(/xss/)</srcipt>

存储型 XSS 攻击原理

黑客事先在 Website 的 Server 中存储一端恶意脚本,之后用户点击访问获取数据,浏览器在解析文件的时候执行了恶意的脚本,向黑客发送敏感数据。

存储型 XSS 完整的攻击流程:

C 表示的是正常访问 Website 的情况。

首先:

  • A : 黑客发现了浏览器有 XSS 存储型的漏洞,于是向浏览器发起恶意代码。
  • B:服务器将这一段恶意代码存储到了服务器中。
  • C:用户发现这个 website 有个地方吸引了他,但是黑客提前在这里埋了恶意代码。
  • D:用户读取了服务器那一段有恶意的代码。
  • E:浏览器执行了恶意脚本获取了用户的敏感信息
  • F:恶意的代码传送到了黑客的服务器里
  • G:黑客就可以从服务器中获取到用户的敏感信息,从而模拟用户登录这个 website 。

反射型 XSS 与 存储型 XSS 的区别:
一、被攻击对象的不同

反射型 XSS 的被攻击对象一般是攻击者去寻找的,就比如说:一个攻击者想盗取 A 的 QQ 号,那么攻击者就可以将一个含有反射型 XSS 的 URL 链接给 A,此时我们可以看出,需要将特定的 URL,注意是特定的 URL 给 A,当 A 点击进入链接时,就受到 XSS 攻击,所以这种攻击范围不是特别的广。

而存储型 XSS 是广撒网的方式或者指定的方式,就是攻击者将存储型 XSS 放在一些有 XSS 漏洞的网站上,只要有用户访问这个链接就会中招,而攻击者也可以寻找被攻击对象,比如说上面的例子,所以我们可以看出,存储型 XSS 的危害性更大,范围更广,可以不需要寻找被攻击对象,只要存储型 XSS 在服务器上就能实施攻击。

DOM 型 XSS 的被攻击对象其实和反射型 XSS 被攻击对象差不多,就是给攻击对象放送 URL。

二、解析位置不同(个人感觉是反射型与存储型区别的本质)

反射型XSS的脚本被解析的地方是浏览器,而存储型XSS的脚本被解析的地方是服务器,DOM型XSS也是浏览器,所以DOM型又叫DOM反射型XSS。但是反射型XSS需要联网,而DOM型不需要!

三、存储时间不同

反射型XSS是既有即用,没有持久性,而存储型 XSS 是存储在服务器上,只要服务器不挂机或者是被干掉,就一直会有,DOM 型 XSS 和反射型差不多,但是用人就扯淡了,那反射型只要不改变源代码不就是一直存在吗?不是的,反射型XSS是必须得特定的URL才能使得被攻击对象中招,如果是单单官方网页,就没有了咯,存储型就不同,只要服务器里面有存储型XSS,不论是不是官网,被攻击对象都会被攻击。

四、允许输入点的不同 (这是DOM型与其他两种的区别)

一般情况下,反射型XSS在搜索框啊,或者是页面跳转啊这些地方,而存储型XSS一般是留言,或者用户存储的地方,而DOM呢?是在DOM位置上,不取决于输入环境上。

DOM 型

特点 :恶意脚本通过修改浏览器的 DOM(文档对象模型)结构执行。
攻击方式 :攻击者操纵页面中的 JavaScript,使其执行恶意代码,通常无需与服务器交互。
示例:通过恶意 URL 参数或输入值,攻击者修改页面的 JavaScript 代码,使其在用户的浏览器中执行恶意操作。
在讲解 DOM-XSS 之前,先以图来说明到底什么是 DOM:

文档对象模型 Document Object Model(DOM)是一个与平台、编程语言不相干的接口,允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果会成为展示页面的一部分。

DOM 型 XSS 其实是一种特殊类型的反射型 XSS,也被称作本地跨站,它是基于 DOM 文档对象模型的一种漏洞。DOM XSS 和反射型 XSS、存储型 XSS 的区别在于 DOM XSS 代码并不需要服务器参与,出发 XSS 靠的是浏览器的 DOM 解析,完全是客户端的事情。

DOM 中 有很多对象,其中一些对象可以被用户所操纵,如 url,location 等。客户端的脚本程序可以通过 DOM 来动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而是从客户端取得 DOM 中的数据后并在本地执行,因此仅从服务器端是没有办法防御 DOM 型 XSS 漏洞的,如若 DOM 中的数据没有经过严格的验证,便会产生基于 DOM 的 XSS 漏洞。

基于 DOM 的 XSS 是反射的特例,其中 JavaScript 隐藏在 URL 中,并在其呈现时由页面中的 JavaScript 取出,而不是在提供服务时嵌入到页面中。

总结: 基于 DOM 的 XSS 的攻击场景和反射性 XSS 是一样的,唯一不同的就是,基于 DOM 的 XSS,不是发生在服务器端,而是直接发生在了浏览器那里。这可以使其比其他攻击更隐蔽,并且监控页面正文的 WAF 或其他防护检测不出恶意内容。

  • 反射型 XSS:通过 URL 传递并立即执行。
  • 存储型 XSS:存储在服务器端数据库中,用户访问时执行。
  • DOM XSS:通过修改客户端的 DOM 执行,不需要与服务器交互。
相关推荐
大方子4 小时前
【PolarCTF】rce1
网络安全·polarctf
枷锁—sha5 小时前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
聚铭网络6 小时前
聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位
网络安全
darkb1rd8 小时前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
世界尽头与你12 小时前
(修复方案)基础目录枚举漏洞
安全·网络安全·渗透测试
枷锁—sha1 天前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
liann1191 天前
3.1_网络——基础
网络·安全·web安全·http·网络安全
ESBK20251 天前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
旺仔Sec2 天前
一文带你看懂免费开源 WAF 天花板!雷池 (SafeLine) 部署与实战全解析
web安全·网络安全·开源·waf
七牛云行业应用2 天前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云