🔍 实验一:反射型 XSS

Reflected XSS Attack

📖 原理说明

反射型 XSS 的特点是:恶意脚本来自当前 HTTP 请求。

攻击流程:

  1. 攻击者构造包含恶意脚本的 URL
  2. 诱导用户点击该链接
  3. 服务器将恶意脚本"反射"回页面
  4. 浏览器执行恶意脚本

🧪 漏洞演示

💡 尝试以下 Payload:

<script>alert('XSS')</script>

<img src=x onerror="alert('XSS')">

<svg onload="alert('XSS')">

🔗 攻击者会构造这样的链接:

http://localhost:4000/api/search/unsafe?q=<script>alert('XSS')</script>

🔬 漏洞代码分析

有漏洞的后端代码:

// ❌ 直接拼接用户输入
res.send(`
  <h1>搜索结果</h1>
  <div>你搜索的是:${q}</div>
`)
// 没有任何过滤!

安全的后端代码:

// ✅ HTML 实体转义
const safeQ = escapeHtml(q)
res.send(`
  <h1>搜索结果</h1>
  <div>你搜索的是:${safeQ}</div>
`)

function escapeHtml(str) {
  return str
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
}

🛡️ 防御要点