1. XSS是什么
XSS(Cross-Site Scripting,跨站脚本攻击)是指攻击者往网页中注入恶意脚本,当其他用户浏览时,脚本在浏览器中执行。
能干什么:
窃取 Cookie(登录凭证)
劫持会话
钓鱼攻击
篡改页面内容
2. 反射型 XSS
原理:恶意代码在 URL 参数中,服务器未过滤直接返回,浏览器执行。
特点:
不存储,一次性
需要诱骗用户点击恶意链接
常见于搜索框、URL 参数反射
经典 Payload:
<script>alert(1)</script> < img src=x onerror=alert(1)>
测试方法:在 URL 参数或输入框输入 Payload,观察是否弹窗。
防御:输出编码(< → <,> → >)
3. 存储型 XSS
原理:恶意代码被存储到服务器的数据库中,任何访问该页面的用户都会触发。
特点:
持久存储,不主动删除一直在
自动触发,无需诱骗
影响面大,可能成百上千用户中招
常见于留言板、评论区、个人资料
经典 Payload:
<script>alert(1)</script> < img src=x onerror=alert(1)>测试方法:在留言板输入 Payload,提交后刷新页面,观察是否再次弹窗。
防御:输出编码 + 输入过滤
4. DOM 型 XSS
原理:前端 JavaScript 操作 DOM 树时,把用户可控的输入写入了页面,导致恶意代码执行。不经过服务器,只在客户端发生。
特点:
纯前端漏洞,不经过服务器
恶意代码在 URL 中(如 # 后面的值)
常见于‘document.write、innerHTML、eval、location.hash’
经典 Payload:
https://example.com/#< img src=x onerror=alert(1)>测试方法:修改 URL 中 # 后面的值,观察页面是否执行恶意代码。
防御:
避免使用 document.write、innerHTML、eval 等危险函数
使用 textContent 或 innerText 代替 innerHTML
对用户输入进行转义
5. 防御 XSS
输出编码,将 < 转成 <,> 转成 >,让浏览器不解析为标签
CSP,限制可执行的脚本来源
HttpOnly Cookie,设置 HttpOnly,禁止 JavaScript 读取
免责声明:本文所有内容仅用于网络安全学习与研究,严禁用于任何非法用途。