Xray对HTML框架嵌入漏洞检测效果有限,因其webscan模块默认不主动检查X-Frame-Options或CSP frame-ancestors缺失,专注注入类漏洞和POC匹配,缺乏专项语义型头策略检测能力。

没有“一键扫出所有HTML漏洞”的工具,Xray、ZAP、Burp 这三类工具各管一段,用错场景反而漏报严重。
为什么Xray对HTML框架嵌入漏洞检测效果有限
Xray 的 webscan 模块默认不主动探测 X-Frame-Options 或 Content-Security-Policy 的 frame-ancestors 缺失问题,它更侧重于注入类漏洞(如 XSS、SQLi)和已知 POC 匹配。即使你开了 --html-output,也不会在报告中单独标出 “Missing Anti-Clickjacking Header” 这类语义型缺失。
- 它能发现部分反射型 XSS,如果攻击 payload 被塞进
<iframe src="javascript:alert(1)">且被渲染,可能触发告警;但不会因为响应头没设DENY就报风险 - 若目标用了动态
src+ 用户输入(如<iframe src="?url=xxx">),Xray 可能因参数污染触发 XSS 插件告警,但这属于间接推断,不是框架嵌入专项检测 - 想让它覆盖这类问题,必须手动启用
--plugins xss,header-security(如果该插件存在且已启用),但官方插件列表里目前无独立的 header-security 检测器
ZAP 是 HTML 框架嵌入漏洞最直接的扫描入口
ZAP 的被动扫描(Passive Scan)会在代理流量过程中自动检查每个响应头,只要返回中不含 X-Frame-Options 或 Content-Security-Policy 的 frame-ancestors,就会标记为 Missing Anti-Clickjacking Header;主动扫描(Active Scan)还会尝试构造恶意页面嵌入目标,验证是否真可被劫持。
- 启动后务必先配置浏览器代理指向
localhost:8080,否则 ZAP 看不到任何流量 - 不要只点首页就开扫——ZAP 需要先“爬”出完整站点结构,建议手动访问几个关键路径(登录页、用户中心、API 接口)再右键“主动扫描”
- 注意
frame-ancestors 'none'和frame-ancestors 'self'效果不同:前者完全禁止嵌入,后者只允许同源,SAMEORIGIN是旧写法,现代应优先用 CSP - 如果目标用了前端路由(如 Vue Router 的 history 模式),ZAP 可能漏掉 hash 后的路径,需配合手动输入 URL 列表扫描
Burp Suite 配合手动验证才能确认真实风险
Burp 的 Scanner 默认不会把“缺少 X-Frame-Options”当高危问题,但它在 Proxy 的 Response 标签页里能一眼看到响应头缺失,配合 Repeater 手动构造嵌入页面测试,是最可靠的闭环验证方式。
立即学习“前端免费学习笔记(深入)”;
- 在 Proxy → HTTP history 里筛选
200 OK响应,逐个点开看 Response Headers,搜索X-Frame-Options和Content-Security-Policy,没出现就是潜在风险点 - 新建一个本地 HTML 文件,内容为
<iframe src="https://target.com/some-page"></iframe>,用浏览器打开——如果页面正常加载,说明未生效防御;如果空白或报错,则头策略起效 - Burp 的 Collaborator Client 可用于验证是否真的存在 UI Redressing 可能性:把 iframe 指向目标页,再叠一层透明按钮诱导点击,但这个动作无法自动化,必须人工操作
- 注意:有些 CDN(如 Cloudflare)会自动添加
X-Frame-Options: SAMEORIGIN,此时实际响应头是你没看到的,得查原始源站响应,不能只信 CDN 返回
真正容易被忽略的是动态生成的 HTML 片段——比如通过 AJAX 加载的弹窗内容里嵌了 <iframe>,或者服务端模板拼接时漏掉了 sandbox 属性。这类问题工具扫不出来,必须结合开发者工具的 Elements 面板手动翻 DOM,看 runtime 生成的标签是否带 sandbox、allow、referrerpolicy 等限制性属性。



















