Reflected XSS Attack
反射型 XSS 的特点是:恶意脚本来自当前 HTTP 请求。
攻击流程:
<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, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
}