dom型xss高危输出点是innerhtml、outerhtml、document.write等操作,若参数含location.search、location.hash、localstorage等不可信源,或模板字符串拼接用户输入,均可能触发;富文本需dompurify净化,img src等属性须校验协议。

HTML网页本身不执行逻辑,但它是XSS、点击劫持、信息泄露等漏洞的主战场。合规性检查不是走流程,而是盯住三类关键点:用户输入如何进、动态内容如何出、资源加载如何控。
如何快速定位HTML中XSS高危输出点
真正的XSS风险不在<script></script>标签里,而在所有把用户数据拼进HTML结构的地方。重点查以下位置:
-
innerHTML、outerHTML、document.write()这些DOM写入操作,只要参数含location.search、location.hash、localStorage.getItem(),就极可能触发DOM型XSS - 模板字符串或
+=拼接的HTML片段,比如el.innerHTML = `<div>` + userInput + `</div>`,哪怕后端做了转义,前端再拼一次就失效 - 表单回显区域(如搜索结果页的“您搜索了:
xxx”)、URL参数反射(如?msg=xxx直接插入<span></span>) - 富文本编辑器输出,若未用
DOMPurify.sanitize()处理,<img src="x" onerror="alert(1)">能直接执行
检查<img src>是否引入SSRF或XSS风险
<img>标签的src属性常被当成“无害容器”,但攻击者可注入javascript:、data:甚至内网地址。排查时注意:
- 所有由用户控制的
src值(如头像URL、商品图链接)必须校验协议:只允许http:、https:,明确拒绝javascript:、vbscript:、data:(除非业务强依赖且已做内容过滤) - 若支持上传图片,服务端必须重写文件(非原样存储),并托管到独立静态域(如
cdn.example.com),禁止与主站同域 - 前端不能仅靠JS正则过滤,因为绕过方式太多(大小写混淆、URL编码、空格分隔);校验必须在服务端完成
- 配合CSP策略:
img-src 'self' https: data:可限制非法协议,但data:需谨慎放行
为什么meta标签和注释可能泄露敏感信息
很多团队只关注可见内容,却忽略HTML源码里埋着的“线索”。这些地方常被扫描工具和人工审计遗漏:
-
<meta name="generator" content="WordPress 6.2">暴露CMS版本,对应已知漏洞可直接利用 -
<meta name="description" content="测试环境,管理员密码:admin123">这类调试残留会出现在生产环境 - HTML注释如
<!-- TODO: remove this debug endpoint /api/debug/userinfo -->或<!-- dev-only: feature flag enabled -->,暴露内部路径或功能开关 - 隐藏元素中的硬编码token:
<div style="display:none;" data-token="eyJhbGciOi..."></div>,JS可能无意中将其发给第三方
CSP配置错误比没配更危险
很多项目加了Content-Security-Policy头,但策略宽松得形同虚设。最典型的问题是:
- 滥用
'unsafe-inline':为省事给style-src或script-src加这个指令,等于把XSS防护门大开 - 过度信任CDN:
script-src 'self' https://cdn.jsdelivr.net允许整个域名,但攻击者可上传恶意包到该CDN的子路径 - 缺失
object-src 'none':Flash/Java插件已被淘汰,但遗留策略若未禁用,仍可能被利用 - 忘记
base-uri 'self':攻击者可通过<base href="http://evil.com">劫持所有相对路径资源请求
上线前务必用Content-Security-Policy-Report-Only模式跑一周,收集真实违规日志再调整策略——凭经验写的白名单,90%会在真实流量中漏掉关键资源。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











