90%的高危dom型xss漏洞集中在innerhtml、document.write、eval三类操作;所有用户可控输入(url参数、hash、localstorage等)未经编码/净化直接进dom即为漏洞。

直接看 innerHTML、document.write、eval 这三类操作,90% 的高危漏洞(尤其是 DOM 型 XSS)都藏在这里。别指望前端校验能防住什么,所有用户可控输入——包括 URL 参数、location.hash、localStorage、表单 hidden 字段、AJAX 返回值——只要没经过编码或净化就进 DOM,就是漏洞。
怎么快速定位 innerHTML 类风险点
这类写法是 XSS 最高频的入口,浏览器解析时会执行其中所有脚本逻辑。
- 全局搜索项目里所有
innerHTML、outerHTML、insertAdjacentHTML、v-html(Vue)、dangerouslySetInnerHTML(React) - 重点检查右侧赋值是否来自:
location.search、location.hash、document.referrer、fetch()响应数据、JSON.parse()后的字段 - 如果看到类似
el.innerHTML = '<div>' + userInput + '</div>',立刻标红——字符串拼接 + innerHTML = 高危 - 注意:用
textContent替代innerHTML显示纯文本,几乎零成本且安全
为什么 document.write 和 eval 必须禁用
这两个函数在现代前端中已无正当使用场景,保留它们等于主动打开后门。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
-
document.write在页面加载完成后调用会清空整个文档,且无法被 CSP 限制;若参数含用户输入,等同于直接注入 HTML -
eval会把字符串当作 JS 执行,任何可控字符串(如 URL 中的callback=alert(1))都可能触发任意代码执行 - 常见伪装写法:
setTimeout('...', 0)、setInterval('...', 0)、Function('return ' + userInput)—— 全部算动态执行,一样危险 - 检查构建产物(如打包后的
dist目录)是否残留这些调用,有些第三方库旧版本仍偷偷用
从 URL 和表单隐藏字段开始人工摸排
攻击者最常篡改的就是这两处,而开发者最容易忽略服务端校验。
- 打开开发者工具,在 Elements 面板里搜
<input type="hidden">,看 value 是否为敏感值(如 <code>user_role=admin、price=0.01、order_id=123) - 手动修改这些值并提交,观察后端是否放行——如果能绕过权限或价格校验,说明服务端没做二次验证
- 对 URL 中所有参数(如
?id=123、?redirect=https://evil.com、?q=<script></script>)逐个测试:" onfocus=alert(1)、javascript:alert(1)、data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== - 特别注意
src、href、data-属性是否由 URL 参数动态填充,闭合引号后可注入事件处理器
真正容易被忽略的是图片和多媒体标签的 src
很多人以为 <img> 只是展示,但它的 src 属性支持 javascript: 和 data: 协议,是经典 XSS 载荷出口。
- 搜索所有动态设置
<img src="...">的地方,尤其是头像、商品图、用户上传预览等场景 - 检查是否做过协议白名单过滤——只允许
http:、https:,严禁javascript:、vbscript:、data:(除非明确需要且内容已净化) - 上传功能中,若后端返回的图片 URL 是用户可控的(如
/uploads/xxx.jpg),需确认该路径是否托管在独立域名,且该域名不解析 HTML/JS -
<video></video>和<audio></audio>的src同理,恶意 MP4 文件虽难执行代码,但配合元数据或解析器漏洞仍有风险
复杂点在于:很多漏洞不是单点问题,而是多个环节松动叠加的结果——比如 URL 参数未过滤 → 前端存入 localStorage → 页面加载时读取并赋给 innerHTML。排查时别停在第一个“可控”,要一路跟到最终执行点。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










