尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
fast-element 的 TrustedTypesPolicy 类型:借助 Trusted Types 筑牢 DOM 安全边界
前端UI组件【免费下载链接】fastThe adaptive interface system for modern web experiences.项目地址https://gitcode.com/gh_mirrors/fa/fast点击查看免费下载导读本文围绕microsoft/fast-element公开导出的TrustedTypesPolicy类型展开讲解它在 fast-element 模板系统中的作用、与浏览器原生 Trusted Types 平台 API 的对接方式以及如何在应用中通过自定义策略控制 HTML 注入与 DOM 写入。读完本文你将掌握TrustedTypesPolicy的准确定义、默认的fast-html策略创建逻辑、通过DOMPolicy.create()注入自定义策略的方法以及结合测试用例验证策略生效的完整链路。TrustedTypesPolicy 类型是什么在浏览器安全模型中Trusted Types 是一套用于防御 DOM XSS 的 API当站点通过 CSPContent Security Policy开启require-trusted-types-for script后浏览器会拦截所有以字符串形式写入innerHTML、document.write、script.src等危险 DOM sink 的操作要求开发者必须经由名为策略policy的对象显式创建受信数据。microsoft/fast-element为此定义了一个轻量类型别名TrustedTypesPolicy用于描述可用于标准 trustedTypes 平台 API 的策略export type TrustedTypesPolicy { createHTML(html: string): string; };该类型定义位于 interfaces.ts公开导出public并同时出现在 api-report.api.md 的正式 API 报告中。它只有一个成员成员签名说明createHTML(html: string): string将传入的 HTML 字符串标记或转换为可信内容并返回注意两点实现细节类型层面返回值声明为string这与浏览器原生TrustedTypePolicy.createHTML()返回TrustedHTML类型略有差异是 fast-element 为兼容未启用 Trusted Types 的环境而做的简化抽象运行时层面fast-element 并不要求返回值必须是原生TrustedHTML对象它只负责把字符串交给该回调处理。fast-element 如何使用 TrustedTypesPolicyTrustedTypesPolicy在 fast-element 中有两处核心消费点都位于模板与 DOM 交互的边界上。1. 模块级默认策略fast-html在 dom.ts 中fast-element 在模块加载时立即创建默认策略fastTrustedTypeconst createHTML html html; const fastTrustedType: TrustedTypesPolicy globalThis.trustedTypes ? globalThis.trustedTypes.createPolicy(fast-html, { createHTML }) : { createHTML };其逻辑是若运行环境存在globalThis.trustedTypes即浏览器已支持 Trusted Types则调用trustedTypes.createPolicy(fast-html, { createHTML })注册名为fast-html的原生策略否则退化为普通对象{ createHTML }createHTML直接原样返回字符串保证在无 Trusted Types 的环境中行为一致。从源码结构看该策略名fast-html是固定常量这也被 dom-policy.pw.spec.ts 中的测试直接验证拦截createPolicy调用后运行DOMPolicy.create()断言策略名数组等于[fast-html, fast-html]。2. DOMPolicy 的 trustedType 选项在 dom-policy.ts 中TrustedTypesPolicy作为创建 DOM 安全策略的选项出现export type DOMPolicyOptions { /** * The trusted type to use for HTML creation. */ trustedType?: TrustedTypesPolicy; /** * The DOM guards used to override or extend the defaults. */ guards?: PartialDOMGuards; };DOMPolicy.create(options)在创建策略时const trustedType options.trustedType ?? createTrustedType();即未显式传入trustedType时使用createTrustedType()dom-policy.ts生成默认策略该函数与dom.ts中的逻辑一致同样优先走globalThis.trustedTypes.createPolicy(fast-html, ...)。最终生成的DOMPolicy通过createHTML(value)委托给该 trusted type 处理createHTML(value: string): string { return trustedType.createHTML(value); }也就是说TrustedTypesPolicy.createHTML是整个 DOM 写入安全链路的第一道闸门所有经由策略生成的 HTML 都会先经过它再流入模板绑定系统。如何在应用中注入自定义 TrustedTypesPolicy将自定义策略接入 fast-element 的方式非常直观在应用启动阶段调用DOMPolicy.create()并传入trustedType即可import { DOMPolicy } from microsoft/fast-element; // 方式一使用浏览器原生策略推荐可配合 CSP const createHTML html html; const nativePolicy globalThis.trustedTypes ? globalThis.trustedTypes.createPolicy(app-fast-html, { createHTML }) : { createHTML }; const policy DOMPolicy.create({ trustedType: nativePolicy }); // 方式二直接传入满足 TrustedTypesPolicy 形状的普通对象 const customPolicy DOMPolicy.create({ trustedType: { createHTML(html: string): string { // 可在写入前做净化、审计、统计等 return sanitize(html); }, }, });对应测试 dom-policy.pw.spec.ts 验证了该路径传入自定义createHTML内部置位invoked标志后调用policy.createHTML(Hello world)断言回调确实被触发。与 DOM.policy 的关系DOMPolicy与全局单例DOM.policy是两个层次的概念DOM.policy是模板系统默认使用的策略可通过DOM.setPolicy()一次性替换dom.ts且出于安全原因只能设置一次重复调用会抛出错误码1201 onlySetDOMPolicyOnce对应的错误DOMPolicy.create()用于按需创建带自定义trustedType与guards的策略对象可单独绑定到特定 binding绑定工厂如 one-way.ts 均接受可选的policy?: DOMPolicy参数。常见误用与报错在 debug.ts 中记录了与 trusted types 相关的调试信息To bind innerHTML, you must use a TrustedTypesPolicy.错误码1202 bindingInnerHTMLRequiresTrustedTypes这提示当应用启用了 Trusted Types 但试图绑定innerHTML而未提供相应策略时fast-element 会给出明确的错误指引。正确的做法是确保应用启动时已通过DOMPolicy.create({ trustedType })或DOM.setPolicy()提供满足TrustedTypesPolicy形状的策略。结语TrustedTypesPolicy 在安全体系中的位置综合源码可以看到TrustedTypesPolicy虽然只是一个结构极其简单的类型别名却是 fast-element 安全模型的关键衔接点它统一描述了接受 HTML 字符串、产出可信内容的策略契约兼容原生 Trusted Types 与无 Trusted Types 环境模块默认注册fast-html策略dom.tsDOMPolicy.create()未指定时自动复用该名称dom-policy.ts应用可通过DOMPolicyOptions.trustedType注入自定义策略配合guards对特定元素/属性的 DOM sink 进行拦截或净化例如默认的safeURL会过滤javascript:、vbscript:、data:等危险协议dom-policy.ts而script、iframe.srcdoc等高风险写入默认直接blockdom-policy.ts。在启用require-trusted-types-for script的 CSP 站点中正是经由这一契约fast-element 的模板绑定才能合法、可控地完成 HTML 写入——既满足了浏览器的 Trusted Types 强制校验又把什么 HTML 可信的决策权交还给了应用开发者。延伸阅读类型完整定义interfaces.ts默认策略创建与DOM.policydom.ts策略创建与守卫机制dom-policy.ts官方 API 报告api-report.api.mdPlaywright 测试用例dom-policy.pw.spec.ts赞分享前端UI组件【免费下载链接】fastThe adaptive interface system for modern web experiences.项目地址https://gitcode.com/gh_mirrors/fa/fast点击查看免费下载相关推荐探索Web安全新边界Trusted Types 项目详解探索Web安全新边界Trusted Types 项目详解 在Web开发中数据注入攻击是一种常见的安全隐患例如XSS跨站脚本攻击。为了解决这个问题W3免费开源简历构建工具 Reactive-Resume 快速上手从本地部署到导出分享免费开源简历构建工具 Reactive Resume 快速上手从本地部署到导出分享 简历投出去石沉大海问题常常不在能力而在呈现。Reactive Resu前端后端AI 应用MCP 服务dsh-pluginDOMPurify与Trusted Types现代Web安全的最佳实践DOMPurify与Trusted Types现代Web安全的最佳实践 在当今Web应用开发中 XSS攻击防护 已成为前端安全的重中之重。DOMPurify应用安全网络安全上一篇Ente Photos 自定义域名Custom Domains完整指南用自己的域名托管分享链接下一篇Hallmark 宏结构 14 · Narrative Workflow用编号阶段与过程时间线为有真实流程的产品搭建落地页创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

PHP8 安全开发四大基线实战:口令哈希、SQL 注入防护、XSS 转义与 CSRF 校验全实测

PHP8 安全开发四大基线实战:口令哈希、SQL 注入防护、XSS 转义与 CSRF 校验全实测

PHP8 安全开发四大基线实战:口令哈希、SQL 注入防护、XSS 转义与 CSRF 校验全实测 Web 安全的第一课不是攻是防:口令怎么存、SQL 怎么写、输出怎么转义、表单怎么防伪造——这四件事做错任何一件,系统就是裸奔。本文用 PHP 8.4.1&#xff08…

📅 2026/10/8 19:29:35
详解ThreadLocal

详解ThreadLocal

一、是什么简单一句话:ThreadLocal 给每个线程单独创建一份变量副本;A 线程修改副本,不影响 B 线程。ThreadLocal 是线程本地变量,它可以在同一个线程内共享数据,线程之间互相隔离。核心:数据不是存在 Thre…

📅 2026/10/8 19:29:35
基于 Gatsby 与 Netlify 的个人网站第四次迭代:v4 项目安装、构建与主题体系全解析

基于 Gatsby 与 Netlify 的个人网站第四次迭代:v4 项目安装、构建与主题体系全解析

前端 【免费下载链接】v4 Fourth iteration of my personal website built with Gatsby 项目地址: https://gitcode.com/gh_mirrors/v41/v4 点击查看 免费下载 本指南以当前仓库根目录的 README.md 为主体,围绕 brittanychiang.com 个人网站的第四次迭代…

📅 2026/10/8 19:29:35
MORE NEWS

更多资讯

📰

工业电源路径保护:eFuse与TVS阵列协同设计实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

银河麒麟离线安装QGis:依赖闭环与批量部署实战

简介:本资源面向在银河麒麟操作系统上需要离线部署QGIS的用户,尤其是使用国产CPU架构、内网环境或无法联网的科研与生产场景。QGIS作为开源地理信息系统,常用于地理数据采集、管理、分析与展示,而银河麒麟基于Linux内核&#xff0…

📰

Kettle实战:学生成绩导入清洗与排名自动化全流程解析

搞数据的人,估计都逃不过这么一关:教务老师发来一堆学生成绩表,Excel一个班一个格式,缺考的空着、学号带着空格、数字存成文本;领导那边要的排名还特别讲究“同分同名次,下一个名次跳过”。我之前接到这类“…

📰

Grok Bot:轻量级数字员工的落地实践与架构设计

1. 这不是“AI助手”,而是一类新型数字员工的实践起点最近在多个技术社群和内部协作平台里,频繁看到“Grok Bot 可当员工雇佣”这个说法。它不是一句营销口号,也不是某家公司的宣传通稿,而是真实发生在一线团队中的工作流重构现象…

📰

Hoppscotch自部署实战:Docker Compose与源码安装详解

Hoppscotch 这个项目最早吸引我,不是因为它挂着“开源版 Postman”的名头,而是因为它把 API 调试这件事直接塞进了浏览器标签页。F12 打开的一瞬间,接口调试工具就已经在那里了,不用再启动一个重型客户端。作为一个每天要和十几台…

📰

华为云AgentArts实战:信贷预审智能体从搭建到调优全链路

金融信贷这个行业,过去几年我最大的感受就是:风控和获客这两件事,正在从"人盯人"变成"模型盯人",再变成"智能体盯流程"。华为云智果AgentArts这个平台,说白了就是让你把大模型能力、业务…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬