XSS漏洞学习总结

发布于:2025-07-20 ⋅ 阅读:(16) ⋅ 点赞:(0)

XSS漏洞分类

一、反射型 XSS(Reflected XSS)

反射型 XSS 是最常见的 XSS 类型之一,也被称为 “非持久型 XSS”。其核心特点是恶意脚本不会被存储在服务器端,而是通过诱骗用户点击包含恶意脚本的链接(如 URL 参数),当服务器接收到请求后,将恶意脚本 “反射” 回用户的浏览器并执行。

典型场景
  • 搜索框:用户输入的内容直接作为 URL 参数返回在页面中,若未过滤,可能触发反射型 XSS;
  • 错误页面:当 URL 中包含错误信息参数时,若直接显示在页面上,可能被注入脚本。
特点
  • 恶意脚本仅在单次请求中生效,不会被长期存储;
  • 依赖用户主动点击恶意链接,攻击成功率相对较低;
  • 通常与社会工程学结合使用(如伪装成可信链接)。

二、存储型 XSS(Stored XSS)

存储型 XSS 也被称为 “持久型 XSS”,其核心特点是恶意脚本会被永久存储在服务器端(如数据库、评论区、用户资料等),当其他用户访问包含恶意脚本的页面时,脚本会被自动加载并执行。

典型场景
  • 论坛 / 博客评论区:攻击者在评论中插入脚本,所有查看该评论的用户都会受到影响;
  • 用户资料页:攻击者在个人简介中注入脚本,当他人查看其资料时触发;
  • 消息系统:恶意脚本被存储在私信中,接收者查看时执行。
特点
  • 恶意脚本长期存储在服务器,影响范围广(所有访问该页面的用户);
  • 攻击隐蔽性强,无需诱骗用户点击特定链接,危害更大;
  • 常见于用户可输入内容并公开展示的功能(如社交平台、电商评价)。

三、DOM 型 XSS(DOM-based XSS)

DOM 型 XSS 与前两种类型的核心区别是:恶意脚本的执行不依赖服务器的响应,而是完全在客户端的 DOM(文档对象模型)中处理。攻击者利用页面中 JavaScript 对 DOM 的操作漏洞,将恶意脚本注入到 DOM 中,导致浏览器执行。

典型场景
  • 前端路由:页面通过 URL 哈希(#后的内容)动态加载内容,若直接将哈希值插入 DOM,可能触发 DOM 型 XSS;
  • 客户端数据处理:JavaScript 从URL 参数中读取数据并渲染到页面,若未过滤,可能存在漏洞。
特点
  • 恶意脚本的注入和执行完全在客户端完成,服务器端无法感知;
  • 漏洞根源在于前端 JavaScript 代码对用户输入的处理不当,而非服务器逻辑;
  • 难以通过服务器端过滤防御,需在前端代码中加强输入验证和输出编码。

常见的绕过技巧

过滤script字符:

(1)可尝试使用大小写混合的方法绕过

<ScRiPt>alert(1)</ScRiPt>

(2)将字符转换为编码进行绕过

<scrip&#x74>alert(1)</scrip&#x74>  //用HTML实体编码替换字母(t的实体是&#x74)

 (3)利用href属性的<a>标签

<a href="javascript:alert(1)">点击我</a>
<a href="javascript&#58;alert(1)">点击我</a> //冒号用实体编码&#58

过滤“<”,“>”字符

(1)尝试使用事件属性(如onclickonerror等)

onerror=alert(1)
onclick=alert(1)

过滤alert字符

(1)可使用相同功能的函数代替

<script>confirm(1)</script> 
<script>prompt(1)</script>   
<script>console.log(document.cookie)</script>

其他特殊技巧

闭合现有标签

若输入位置处于已有标签的属性中(<input value="用户输入">),可闭合现有标签并注入新标签

/*假设输入位置:*/<input value="用户输入">,
/*输入以下内容 :*/"><script>alert(1)</script><"
/*结果变为 */<input value=""><script>alert(1)</script><">


网站公告

今日签到

点亮在社区的每一天
去签到