trusted types 与 csp 是现代前端安全的强制性基础设施,需通过 trusted-types 和 require-trusted-types-for 指令协同启用,配合策略注册、指令配对与加载时序严丝合缝,方能从源头阻断 dom xss。

Trusted Types 与 Content-Security-Policy(CSP)不是可选插件,而是现代前端安全的强制性基础设施。二者协同,能从源头封堵 DOM XSS 的全部主流注入路径——不靠过滤、不靠检测,靠白名单约束执行边界。关键在于策略注册、指令配对、加载时序三者严丝合缝。
必须配置的 CSP 核心指令
Trusted Types 不会自动生效,它完全依赖 CSP 响应头中的两个指令强制触发:
-
trusted-types:声明允许创建的策略名称白名单。生产环境推荐显式列出,例如
trusted-types default securePolicy;禁用所有策略用'none';避免使用*,它削弱策略可审计性。 -
require-trusted-types-for 'script':强制所有高危 DOM sink(如
innerHTML、eval、javascript:URL)只接受TrustedHTML等可信类型对象。不要设为'all'或'style',除非你已完整覆盖 CSS 相关 sink 场景。 - 配套基础指令不可省:
default-src 'self'和script-src 'self'是最小信任基线;若需 CDN 脚本,应明确添加哈希('sha256-xxx')或 nonce('nonce-abc123'),而非放行'unsafe-inline'。
策略注册必须早于任何 DOM 操作
浏览器在首次调用受保护 sink(如 el.innerHTML = ...)时即校验 Trusted Types 是否就绪。若策略未注册,直接报错并中断渲染。
前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。
- 把策略定义放在 HTML 文档最顶部的
<script></script>中,且不加async;用defer也可,但需确保它排在所有其他脚本之前。 - 策略名
'default'是特殊回退通道,务必定义——当某处未指定策略名调用trustedTypes.createPolicy()时,浏览器会尝试用default策略兜底,否则直接拒绝。 - 策略函数体内禁止出现
eval、new Function、字符串拼接后return str等操作;可信类型对象应在策略内通过安全方式构造,例如用DOMPurify.sanitize()处理后转为TrustedHTML,而非绕过校验返回原始字符串。
企业级白名单需分层收敛,而非“一策通吃”
大型项目常有多个团队、多种框架(React/Vue/Lit)、多类数据源(CMS、用户评论、富文本编辑器)。统一用一个策略极易失控,应按职责拆分:
-
框架专用策略:如 Lit 项目注册
lit-html策略,仅允许其模板引擎输出;Vue 可注册vue-template,配合v-html指令做封装。 -
业务域策略:用户生成内容(UGC)单独注册
ugc-sanitizer,绑定 DOMPurify 并限定只保留<p><strong><ul></ul></strong></p>等白名单标签;后台配置的富文本 banner 则用admin-banner策略,允许<img>+src白名单域名。 -
CSP 响应头同步细化:在
trusted-types指令中只列出实际注册的策略名,例如trusted-types default ugc-sanitizer admin-banner;未列名的策略即使代码中创建了,也会被浏览器拒绝。
上线前必须验证的三个断点
策略部署后,仅看控制台无报错不等于生效。要确认真正拦截能力:
- 手动触发一次
document.body.innerHTML = '<script>alert(1)</script>'—— 应报Failed to set an illegal value类型错误,而非弹窗。 - 检查 Network 面板响应头,确认
Content-Security-Policy完整包含trusted-types和require-trusted-types-for,且无拼写错误或空格缺失。 - 打开 Chrome DevTools → Application → Content Security Policy,查看当前页面激活的策略详情,确认 “Trusted Types enforcement” 显示为 Enabled,并列出你注册的策略名。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










