静态html页面虽不执行逻辑,但仍是xss、clickjacking、可访问性缺陷和信息泄露高发区;需分层扫描:用axe-core检测image-alt等violations,检查onerror等事件属性与javascript:伪协议,验证x-frame-options或csp frame-ancestors响应头,并人工审查注释、meta标签及隐藏内容。

静态HTML页面本身不执行逻辑,但仍是XSS、Clickjacking、可访问性缺陷和隐藏敏感信息的高发区。扫描不是“跑个工具就完事”,而是分层确认:输出上下文是否安全、响应头是否防御嵌入、源码是否暴露线索、结构是否满足基础无障碍。
用 axe-core 快速抓出可访问性硬伤
可访问性漏洞大多写死在HTML源码里,alt、role、lang 缺失无法靠JS补救。直接在浏览器控制台运行:
await (await fetch('https://cdn.jsdelivr.net/npm/axe-core@4.10.2/axe.min.js')).text().then(eval); axe.run({shadowDom: true}).then(console.log)
重点关注 violations 中的 image-alt、color-contrast、heading-order。常见卡点:
- 页面未加载完成就执行 → 改成
document.readyState === 'complete' && axe.run() - 用了 Web Components 或动态插入内容 → 必须加
{shadowDom: true} -
impact: 'minor'的条目(如某些 SVG 报告)别急着修,先人工确认是否真实影响键盘导航或屏幕阅读器
检查内联脚本与事件属性是否引入XSS风险
静态HTML里的 <script></script> 标签只是表象,真正危险的是那些把用户输入直接拼进JS字符串或HTML属性的地方。重点搜:
- 所有
onclick、onerror、onload等事件属性 -
href="javascript:..."、src="data:text/html,..."这类伪协议调用 -
<script></script>块中是否出现类似var msg = ""的服务端模板占位符(即使没渲染,也说明后端可能未转义)
如果发现 innerHTML 赋值语句(哪怕只是示例代码),立刻标记为高风险 —— 它不需要后端参与就能触发XSS。
验证响应头是否防Clickjacking
静态页面被嵌入恶意iframe是点击劫持的前提。仅看HTML源码没用,必须查HTTP响应头:
- 打开开发者工具 → Network → 刷新页面 → 点开HTML请求 → 查看Response Headers
- 确认是否存在
X-Frame-Options: DENY或Content-Security-Policy: frame-ancestors 'none' - 若两者都缺失,攻击者可轻松用透明
<iframe></iframe>覆盖你的页面
注意:<meta http-equiv="X-Frame-Options"> 无效,浏览器只认HTTP头。
手动翻源码找隐藏线索和误配标签
自动化工具会漏掉人为埋的坑。逐行扫HTML源码时盯紧这几处:
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











