什么是 Trusted Types API,它如何帮助我们从根源上防止 DOM XSS 攻击?

幻影之瞳

幻影之瞳

2025-10-05

600人浏览

原创

trusted types通过强制使用可信对象阻止dom-based xss,要求开发者创建策略处理html、脚本和url,结合csp头可有效拦截危险操作,提升应用安全性。

什么是 trusted types api,它如何帮助我们从根源上防止 dom xss 攻击?

Trusted Types API 是一种浏览器安全机制,旨在从根源上阻止 DOM-based XSS(跨站脚本)攻击。它的核心思路是:不允许开发者直接将不可信的数据当作可执行的脚本或 HTML 插入到页面中,而是强制要求通过可信类型对象来处理这类敏感操作。

DOM XSS 的常见成因

DOM XSS 发生在 JavaScript 动态操作 DOM 时,把用户输入(如 URL 参数、API 响应)未经充分验证或转义就写入可能导致脚本执行的位置,比如:

  • innerHTML:插入 HTML 字符串
  • outerHTML:替换整个元素的 HTML
  • document.write():直接写入内容
  • location.href、location.assign():跳转到恶意 URL

例如:

element.innerHTML = userInput; // 危险!userInput 可能包含 <script> 标签 </script>

Trusted Types 如何工作

Trusted Types 引入了“信任”的概念。它不允许直接传入字符串到危险的 DOM 操作中,必须使用由策略创建的“受信任对象”(如 TrustedHTML、TrustedScript、TrustedURL)。

开发者需要预先定义策略(policy),用于封装数据处理逻辑。这些策略负责对输入进行清理、转义或验证,并返回一个可信类型实例。

示例:定义一个允许安全 HTML 的策略

if (window.TrustedTypes && !window.TrustedTypes.createPolicy('defaultPolicy')) { window.TrustedTypes.createPolicy('htmlPolicy', { createHTML: (input) => { // 简单示例:仅允许特定标签,实际应用应使用 DOMPurify 等库 return input.replace(/<script.>.*?/gi, ''); } }); } </script.></font> <p>使用该策略设置 innerHTML:</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2179" title="Comet AI 浏览器"><img src="https://img.php.cn/upload/manual/000/969/633/69e8a9e061c88522.png" alt="Comet AI 浏览器" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/gongju/2179" title="Comet AI 浏览器" class="overflowclass">Comet AI 浏览器</a> <p class="overflowclass">下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。</p> </div> <a rel="nofollow" href="/xiazai/gongju/2179" title="Comet AI 浏览器" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <font face="monospace"> const policy = window.TrustedTypes.getPolicyByName('htmlPolicy'); element.innerHTML = policy.createHTML('<b>Hello</b><script>alert(1)</script>'); // 结果:Hello,脚本被过滤

如果尝试传入普通字符串,浏览器会抛出 TypeError,从而阻止潜在攻击。

如何启用并强制执行 Trusted Types

仅使用 API 不够,需通过 CSP(Content Security Policy)头来强制启用:

Content-Security-Policy: require-trusted-types-for 'script'; trusted-types htmlPolicy defaultPolicy;
  • require-trusted-types-for 'script':要求所有 DOM 数据操作必须使用可信类型
  • trusted-types 后列出允许的策略名:限制只能使用声明过的策略

一旦启用,任何绕过策略的赋值操作都会被拦截,大幅降低误用风险。

实际优势与注意事项

Trusted Types 的最大价值在于“防御纵深”——即使开发人员疏忽,也不会轻易引入漏洞。它把安全控制从“靠人写对代码”转变为“系统强制校验”。

  • 有效防止模板注入、动态拼接 HTML 导致的 XSS
  • 与现有清理库(如 DOMPurify)结合更安全
  • 可在大型团队中统一安全策略
  • 现代浏览器支持良好(Chrome、Edge、Firefox 等)

需要注意的是,不能完全依赖它替代输入验证和输出编码,而应作为整体安全架构的一部分。

基本上就这些。Trusted Types 不复杂但容易忽略,关键是配合 CSP 使用才能真正发挥防护作用。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1974

5

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.06

2410

7

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

2026.03.24

2057

22

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.21

2337

5

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.05

1357

4

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

2025.04.24

1775

6

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

2023.08.22

1020

3

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

2023.11.27

879

6

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2023.09.20

1128

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 11.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.1万人学习