DOM型XSS漏洞源于前端脚本将用户可控数据未经安全处理直接写入innerHTML、eval等敏感DOM位置,完全在浏览器端执行,需通过开发者工具追踪location.hash等数据源及sink函数定位风险点。

不用装工具、不写代码,打开浏览器开发者工具就能发现大部分真实存在的 HTML 安全问题。关键不是“有没有漏洞”,而是“哪些地方正在把用户输入直接塞进页面或跳转逻辑里”。
怎么看 URL 参数有没有被乱用
很多 XSS 和跳转漏洞就藏在地址栏里。打开网页后,先手动改一改 URL 中的参数,比如把 ?id=123 改成 ?id=%3Cscript%3Ealert(1)%3C/script%3E(即 <script>alert(1)</script> 的 URL 编码),然后回车。
- 页面弹窗了?说明输出没转义,存在反射型或 DOM 型 XSS
- 页面跳转到了奇怪的域名?检查是否用了
window.location.href = urlParam且没做白名单校验 - URL 里出现
redirect=、url=、next=、return_to=这类参数,基本都要重点盯——它们常是钓鱼跳转入口 - 注意:有些参数只影响前端 JS 行为(如
location.hash),不会发请求,但依然可能触发innerHTML或eval()
怎么揪出隐藏的 DOM 型 XSS
这类漏洞不经过服务器,纯靠前端 JS 把用户输入写进 DOM。打开开发者工具 → Sources 面板,全局搜索这几个关键词:
-
location.hash、location.search、document.referrer—— 常见数据源 -
innerHTML、outerHTML、document.write、eval(、setTimeout(、setInterval(—— 危险 sink 函数 - 如果搜到类似
el.innerHTML = location.hash.slice(1)这种写法,基本就是高危点 - 再切到 Elements 面板,手动在控制台输
location.hash = "#<img src="https://img.php.cn/" alt="新手如何自查HTML网页中的安全漏洞">",看会不会触发
怎么快速扫一遍页面有没有基础防护缺失
不用读完整个 HTML,重点看三处:
立即学习“前端免费学习笔记(深入)”;
-
响应头:在 Network 面板点任意一个 HTML 请求 → Headers → Response Headers,确认有没有
X-Frame-Options: DENY或Content-Security-Policy: frame-ancestors 'none'。没有的话,页面可能被嵌入钓鱼页 -
meta 标签:在 Elements 面板搜索
<meta name="generator"或<!--,开发注释、CMS 版本、临时调试语句都可能暴露技术栈或测试账号 -
富文本区域:找到所有
<textarea>或支持 HTML 输入的编辑框,粘贴<img src=x onerror=alert(1)>并提交/预览。如果弹窗,说明服务端没过滤或前端没转义
最常被忽略的是:前端对 location.hash 或表单值的处理,往往几行 JS 就埋下 XSS;而 URL 跳转参数看似只是“方便用户”,实则只要没白名单,就等于给钓鱼链接开了绿灯。查的时候别只盯着“有没有漏洞”,要盯“哪段逻辑在信任用户输入”。



















