HTML静态分析可快速定位未闭合script标签、硬编码密钥、调试注释及innerHTML等XSS高危点;需用“查看网页源代码”获取原始HTML,结合Ctrl+F搜索关键词与危险函数,并区分innerHTML(执行HTML)与textContent(纯文本)的本质风险。

HTML静态代码分析不能直接发现运行时漏洞,但能高效定位高危模式和隐藏线索——比如未闭合的<script>标签、硬编码密钥、注释里的调试路径、innerHTML赋值点。
怎么用浏览器开发者工具快速抓取可疑HTML结构
实际审计中,多数人只看Elements面板,却忽略Sources里原始HTML响应体。真实漏洞常藏在服务端渲染后未被JS重写的静态部分,比如模板注入残留或条件注释。
- 右键页面 → “查看网页源代码”,不是“检查元素”:前者是服务器返回的原始HTML,后者是DOM树(可能已被JS篡改)
- 搜索
<!--,重点看注释内容是否含TODO、DEBUG、admin_path、test_key等关键词 - 用
Ctrl+F搜innerHTML、document.write、eval(、setTimeout(,这些是XSS高危接收器(sink) - 注意
meta标签里的http-equiv="refresh"或content属性,可能被用于跳转劫持
为什么innerHTML = ...比textContent = ...更危险
本质区别在于浏览器是否解析字符串为HTML节点。innerHTML会触发HTML解析器,把<script>、<img onerror=...>等全部执行;textContent只是纯文本插入,连尖括号都会被转义显示。
- 常见误用场景:用户昵称、评论内容、URL参数回显,开发者图省事直接拼进
innerHTML - 即使输入已过滤
<script>,仍可能绕过:比如<img src=x onerror=alert(1)>或<svg onload=alert(1)> - 修复不等于替换函数:若原逻辑依赖富文本,应改用
DOMPurify.sanitize()后再赋值,而非简单换textContent
哪些HTML特征暗示DOM型XSS风险点
DOM型XSS不依赖服务端回显,靠前端JS读取URL或存储数据后写入DOM。静态分析要盯住“数据源→处理→sink”这条链。
立即学习“前端免费学习笔记(深入)”;
- 数据源关键词:
location.hash、location.search、document.referrer、localStorage.getItem、sessionStorage.getItem - 危险sink函数:
innerHTML、outerHTML、document.write、eval()、setTimeout()(第二个参数为字符串时) - 典型脆弱模式:
const q = new URLSearchParams(location.search).get('q'); document.getElementById('res').innerHTML = q; - 容易漏掉的间接调用:某些UI框架(如Vue 2的
v-html、React的dangerouslySetInnerHTML)本质也是innerHTML语义,需单独标记
真正难的是区分“看起来像漏洞”的代码和“实际可利用”的路径——比如location.hash被读取但没写入DOM,或写了但经过了encodeURIComponent处理。静态分析只能标出嫌疑点,最终得靠手动构造URL验证是否触发。别指望工具自动判断上下文是否安全。



















