html源码中meta标签的name和content属性是高危指纹入口,常暴露cms版本、api密钥、内部路径等敏感信息,如generator、author、debug等字段需重点排查。

直接看源码就能发现大部分HTML层安全漏洞,关键不是“有没有工具”,而是知道该盯住哪几处、为什么这些位置危险、以及浏览器实际怎么解析它们。
检查所有meta标签里的name和content属性
很多开发者以为meta只是给搜索引擎看的,其实它常被用来埋藏调试信息、API密钥、内部路径甚至未启用的功能开关。比如<meta name="generator" content="WordPress 6.2.1">暴露了CMS版本;<meta name="api-key" content="sk_live_...">就是硬编码密钥。
- 重点搜索:
generator、author、description、keywords、viewport(看是否禁用缩放,可能暗示移动端限制逻辑) - 特别警惕
content里出现http://、localhost、/admin、debug、test等字符串 - 注意
http-equiv值为refresh或set-cookie的标签——可能被用于跳转劫持或伪造响应头
定位所有style="display:none"、class="hidden"或注释块里的敏感内容
隐藏不等于安全。攻击者右键“查看网页源代码”就能看到<!-- API_TOKEN=xxx -->或<div style="display:none">dev_mode=true</div>。这类内容常被前端用于降级逻辑、灰度开关或临时调试,但上线后忘了清理。
- 用浏览器开发者工具的
Elements面板搜索display:none、visibility:hidden、opacity:0,再切到Console执行document.querySelectorAll('[style*="display:none"], .hidden, .d-none')快速验证 - 别只信CSS类名——
hidden可能是自定义类,也可能是Bootstrap、Tailwind等框架的语义类,需结合实际样式判断是否真隐藏 - 注释里搜
TODO、FIXME、DEBUG、KEY、SECRET,人工过一遍比自动化更可靠
扫描所有href、src、data-属性中的用户可控输入
DOM型XSS和URL参数篡改漏洞,90%都从这里开始。只要属性值拼接了location.search、location.hash、document.referrer或localStorage,就极可能触发漏洞。
- 在
Console中运行Array.from(document.querySelectorAll('*')).filter(el => [...el.attributes].some(attr => /href|src|data-/.test(attr.name) && (attr.value.includes('location') || attr.value.includes('referrer') || attr.value.includes('localStorage'))))可快速标出高风险元素 - 重点关注
<a href="javascript:..."></a>、<img src="data:text/html;base64,...>%E3%80%81<iframe%20src=" about:blank>这类构造,它们绕过CSP的能力比普通script更强 -
data-属性常被JS读取并动态渲染,比如<div data-user-id="123"> → <code>el.dataset.userId→innerHTML,中间缺一环编码就炸验证所有
innerHTML、outerHTML、document.write调用的数据来源这是DOM型XSS最直接的入口。哪怕页面本身没反射参数,只要前端JS从URL、storage或API响应里拿了数据,又没做
textContent或DOMPurify.sanitize(),就等于开了后门。- 用
Ctrl+Shift+F全局搜索innerHTML、outerHTML、document.write、insertAdjacentHTML,逐个检查右侧表达式是否包含location、JSON.parse、atob、decodeURIComponent等解码函数 - 注意间接调用:比如
Vue的v-html、React的dangerouslySetInnerHTML,它们本质和innerHTML一样危险 - 如果看到
innerHTML = '<div>' + userInput + '</div>',不用测试就知道存在漏洞——字符串拼接HTML永远不安全
真正容易被忽略的,是那些“看起来无害”的组合:比如
meta里写了debug=true,同时某个data-属性又读了它去控制innerHTML开关——单看每个点都没问题,串起来就是完整攻击链。查HTML漏洞,本质是查“信任传递”是否断在了不该断的地方。 - 用











