dom型xss漏洞需重点检查on事件处理器、javascript:协议url、srcdoc等可执行属性,以及location.search/hash等前端数据源是否未经编码直接写入innerhtml等敏感位置。

直接看源码比跑扫描器更快定位真实风险,但必须盯住几个关键位置——不是所有标签都危险,危险的是那些“能执行、能反射、能隐藏”的地方。
检查所有带 JavaScript 执行能力的 HTML 属性
浏览器会主动解析并执行这些属性的值,只要内容未编码或过滤,就可能触发 XSS。重点排查:
-
onerror、onclick、onload、onfocus等所有以on开头的事件处理器 -
href值以javascript:或vbscript:开头(如href="javascript:alert(1)") -
src、srcdoc、data属性中含javascript:协议 -
srcdoc尤其容易被忽略——它等价于内嵌一个完整 HTML 页面,内容直译执行
常见误判:看到 <img src="x" onerror="..."> 就以为是防御性写法,其实 onerror 本身已是执行入口;用 textContent 赋值不会触发,但 innerHTML、outerHTML、insertAdjacentHTML() 会。
审查用户输入是否被反射到 DOM 中
这是 DOM 型 XSS 最隐蔽也最常被漏掉的位置。不经过服务器响应,纯前端拼接就能出问题。
- 搜索
location.search、location.hash、document.referrer的读取逻辑 - 检查这些值是否被直接用于:
innerHTML、document.title、iframe.src、eval()、setTimeout()字符串参数 - URL 参数回显到
<input value="xxx">时,攻击者可用" onfocus="alert(1)闭合引号注入 - 注意 HTML 实体绕过:
"可替代英文双引号,绕过简单正则检测
典型线索:页面没刷新,但内容变了,且 URL 中 # 或 ? 后面跟着一长串编码字符。
识别隐藏内容与异常结构
恶意代码常靠隐藏+触发实现“静默劫持”,靠 Elements 面板看不出原始意图,必须查源码。
- 查找
display:none、visibility:hidden、opacity:0+position:absolute的组合样式,再顺藤摸瓜找对应id是否被:target、location.hash或 JS 激活 - 检查注释里是否藏有可疑脚本:
<!-- <script>...</script> -->,有些 CMS 会保留调试用注释 - 确认所有
<img>都有alt属性;缺失alt不是漏洞,但img:not([alt])选择器能快速标出可访问性隐患点 - 灰色斜体的标签(如
<div> 在 Elements 面板中显示为灰色)说明浏览器自动补全了闭合标签——原始 HTML 很可能漏写了 <code>











