Level 01 — 反射型 XSS
◈ 基础篇

反射型 XSS Reflected Cross-Site Scripting

阅读约 3 分钟

什么是反射型 XSS?

反射型 XSS 是最常见的 XSS 类型。攻击者的 payload 包含在 URL 参数中,服务器将其直接反射回 HTML 响应,浏览器将 payload 当作 JavaScript 执行。

关键特征

非持久化。payload 不会存储在服务器上,需要受害者点击恶意链接才能触发。攻击者通常通过钓鱼邮件、社交媒体等方式传播恶意链接。

攻击流程

01
构造恶意 URL page.php?search=<script>alert(1)</script>
02
诱导用户点击

通过钓鱼邮件、短链接等方式

03
服务器反射

参数值直接嵌入 HTML 响应

04
浏览器执行

解析 HTML 时执行注入的 JS

漏洞代码分析

以下是典型的反射型 XSS 漏洞代码。注意 $_GET['search'] 的值被直接拼接到 HTML 输出中:

<?php
// 获取 URL 参数
$search = $_GET['search'];

// 危险:直接输出,无过滤/转义
echo "搜索结果: " . $search;
//                    ↑ 用户输入直接拼接到 HTML
?>

当用户访问 ?search=hello 时,页面显示「搜索结果: hello」。但当用户访问 ?search=<script>alert(1)</script> 时,浏览器会将 <script> 标签解析为可执行的 JavaScript。

Source/Sink 模型

理解 XSS 的关键在于 Source/Sink 模型:

Source(源)

用户可控的输入点:

  • URL 参数($_GET
  • 表单数据($_POST
  • HTTP 头($_SERVER
  • Cookie($_COOKIE

Sink(汇)

将数据渲染到页面的地方:

  • echo / print
  • innerHTML(JS)
  • document.write()(JS)
  • HTML 属性(如 href

当 Source 未经过滤直接到达 Sink,就产生了 XSS。

危害

窃取 Cookie

攻击者可获取用户的会话凭证,劫持账户

🎣
钓鱼攻击

在页面中注入伪造的登录表单,骗取用户密码

键盘记录

捕获用户在页面上的所有键盘输入

恶意重定向

将用户跳转到钓鱼网站或恶意下载页面

知识检测

完成以下题目,确认你已理解本关知识点

Q1 反射型 XSS 的 payload 通常通过什么方式传入?
Q2 以下哪个是最基本的 XSS payload?