burp suite主动扫描常漏dom型xss,因其不执行js、不模拟交互,无法捕获localstorage读取后拼接innerhtml等动态渲染行为;需手动用proxy history筛选xhr请求,发往repeater验证payload回显,并检查js中innerhtml、eval等高危函数调用。

HTML网页本身不执行逻辑,但它是所有前端安全问题的“画布”——XSS、Clickjacking、信息泄露、富文本注入、动态加载漏洞都依赖HTML结构和上下文暴露风险。扫描不能只看标签语法,得盯住三件事:用户输入怎么进来的、怎么被渲染的、服务端头和策略配没配。
怎么用 axe-core 快速扫可访问性+基础XSS线索
axe-core 不是杀毒软件,但它能暴露大量 HTML 层面的硬伤,而这些恰恰是 XSS 和信息泄露的温床。比如 img 缺 alt 属性本身不危险,但如果页面用 innerHTML 拼接了用户昵称又漏掉转义,axe 会同时报出 image-alt 和后续 DOM 操作的上下文异常。
- 在控制台运行前先等页面加载完成:
document.readyState === 'complete' && axe.run({shadowDom: true}) - 重点关注
violations中的script-onclick、onerror-event-handler、javascript-protocol这类 ID,它们直指事件属性或伪协议滥用 - 如果发现大量
color-contrast或heading-order报错,说明页面大量使用内联样式或 JS 动态生成结构——这类页面更可能绕过静态过滤,需人工跟进 DOM 写入点
为什么 Burp Suite 主动扫描常漏掉 DOM 型 XSS
Burp 的主动扫描默认只分析服务器返回的原始响应体,它不会执行 JavaScript,也不会模拟用户交互后触发的二次渲染。所以当一个 video 标签的 src 是由 localStorage 读取并拼接到 innerHTML 的,Burp 看不到这个拼接动作,也看不到最终插入的恶意 payload。
- 手动补位:在 Burp 的 Proxy History 里筛选出含
XHR或fetch的请求,右键 → “Send to Repeater”,修改参数为<img src="x" onerror="alert(1)">,再观察响应是否原样返回该字符串 - 检查 JS 文件中是否调用
element.innerHTML、document.write、eval、setTimeout(第二个参数为字符串)等高危函数,并确认其参数是否来自location.search、URLSearchParams、fetch响应或localStorage - 特别注意
data-属性:有些框架(如 Vue 2 的v-html)或手写代码会把data-html值直接赋给innerHTML,Burp 不会识别这种语义
怎么验证 X-Frame-Options 和 CSP 是否真生效
光看响应头里有 X-Frame-Options: DENY 不够,浏览器兼容性、覆盖顺序、CSP 与 frame-options 共存时的优先级都会影响实际效果。真实攻击场景下,攻击者会构造最小化测试页,你得先自己证伪。
- 本地建一个测试 HTML:
<iframe src="https://target.com/" sandbox="allow-scripts"></iframe>,打开后看控制台是否有Refused to display或Blocked script execution错误 - 如果目标用了 CSP,重点查
frame-ancestors指令是否覆盖了X-Frame-Options(现代浏览器以 CSP 为准),且值不是'none'或'self'以外的通配符 - 注意重定向链:首页返回了正确头,但登录跳转后的 /dashboard 页面可能漏配——得对每个关键路径单独抓包验证
富文本编辑器内容怎么测才不白忙
富文本不是“插进去就完事”,它的风险藏在三段生命周期里:输入时的过滤、存储时的编码、输出时的上下文渲染。只测提交接口或只测展示页,都会漏掉中间环节。
- 别只试
<script></script>:优先打<img src="x" onerror="alert(1)">和<svg></svg>,很多编辑器允许img和svg标签但忘了过滤事件属性 - 检查回显位置:是直接
innerHTML插入?还是用textContent?或者走 Markdown 渲染器?不同路径解码时机不同,同一 payload 在 A 页面弹窗、B 页面不弹,说明某处解码/编码失配 - 上传功能联动测:如果编辑器支持图片上传,上传一个文件名含
"><script>alert(1)</script>的 PNG,看返回的 HTML 回显是否闭合了标签——这是典型的文件名反射 XSS
真正卡住人的从来不是工具会不会用,而是看到一个 div 里写了 style="display:none" 时,要不要顺手查查它里面有没有 localStorage.getItem('token');看到一个 video 标签,要不要点开 Network 面板看看它的 src 是写死的还是从 URL 参数拼的。HTML 扫描的终点,永远是人眼盯住那一行 DOM 操作代码的瞬间。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











