Fronts 2.0
运行时指南

隔离与安全

信任模型、DOM 与 realm 隔离、iframe 协议权威、capability service 和供应链边界。

威胁模型

Fronts 假设独立交付的应用可能有缺陷,也可能具有不同信任级别。它降低意外干扰并约束显式 Host API,但绝不声称同 realm JavaScript 是安全 sandbox。安全评估必须分别处理三面:允许执行哪份代码 (provenance)、代码可访问哪些 globals/DOM(execution realm)、应用能调用哪些宿主操作(authority)。

容器对照

容器CSS 隔离JS realm 隔离Host service典型用途
DOM仅靠 producer 约定直接 scoped object同设计系统的可信应用
Shadow DOM强 selector 边界,但有继承/逃逸限制直接 scoped object可信代码的样式封装
iframedocument/origin 边界独立 realm,强度取决于 sandbox/originscoped RPC较低信任或依赖冲突应用

官方 Module Federation 不自动做 CSS 隔离,因为 shared dependency 和 runtime 注入样式让所有权模糊。 Fronts 同样不抓取或搬运 parent document 中的 style;Shadow container 只提供 shadow target。

DOM 与 Shadow DOM

DOM adapter 创建并拥有带 tag、class、attributes 和 Fronts identity data 的子元素,先卸载应用再 移除元素。它只适合允许共享页面的可信代码:应用仍能访问 windowdocument、页面 cookie 和 target 外 DOM。通用 DOM attribute 交给浏览器验证,Fronts 不把它描述成同 realm 安全 allowlist。

Shadow adapter 创建 host element,并 attach open/closed shadow root。producer 必须用 inline style、 constructable stylesheet、指向 shadow root 的 CSS-in-JS 或 custom element。Shadow DOM 不隔离 JS globals、network、storage、继承属性和 CSS variable、渲染到外部的 portal 或 shared singleton state; 它是样式/DOM 封装,不是 hostile-code boundary。

Iframe 容器与 agent

parent 负责解析策略、创建 iframe、授权 capability 和代理 lifecycle;child agent 拥有独立 loader 与 MF instance,在 child document 内加载、验证和挂载;RPC 用不可预测 channel ID 与协议版本关联。

必需控制包括:精确 targetOrigin,拒绝通配;只在 connect 消息中 transfer 专用 MessagePort, child 校验 sender origin/source;agent 有 exact parent allowlist;sandbox 保留专用 child origin;Host 显式选择 allow;真实应用加载后只协商一次 capability;每次调用校验 capability 和 method;参数/ 结果可 structured clone;connection/lifecycle timeout 有限且可配置(0 明确关闭 deadline);dispose 关闭 channel 并 reject pending promise。

child 自建 MF instance,避免 parent 先执行 remote 再假装 iframe 提供隔离。shared dependency 因此 限于 child runtime,以一些重复换取真正 realm isolation。

Sandbox 与 origin

精确 origin handshake 需要 allow-scriptsallow-same-origin:opaque sandbox origin 无法接收 发往部署 exact origin 的 connect 消息,而 Fronts 不会降级到 targetOrigin="*"。agent 必须部署在 不同于 shell 的专用 origin;跨源时 allow-same-origin 只保留 child 自己的 origin,不赋予 parent origin 访问。绝不能把同配置移到 shell origin。

默认 sandbox 就是这两个 token;其他 browser permission 与 token 必须逐项授权。CSP、Trusted Types、 COOP/COEP、cookie 和 server header 仍由部署负责。generic attributes 不能覆盖 srcsandboxallow 等 typed fields、Fronts data-* 或 inline on* handler。

Capability-scoped services

producer 声明 capabilities: ['navigation', 'telemetry'],Host 再按可信 identity 与 signal 授权。 需要实例、tenant、deployment、trace 绑定时使用 createServices;它得到 Host-issued context,并可返回 async disposer。静态与 provider service 合并(provider 优先),再做 policy。最终 scope 只暴露允许的 own key,拒绝 prototype-mutating 名称;abort/unmount 立即 revoke proxy,然后 dispose provider 一次。

iframe authority 是三者交集:proxy 配置的最大集合、parent 实例 scope 实际授权服务、child 真实应用 声明。最大集合只是上限,不是 proxy 的 mandatory dependency。协议 v2 中 child 加载后提交自己的 声明,parent 锁定一次 grant;child 只为 exact grant 创建 RPC stub,parent 每次 service.call 又独立 检查。协商前调用、重复协商或 grant 外调用都 fail closed;child 从未得到原始 service object。

service 应暴露意图而不是 ambient authority;Host 实现校验参数并把可信 identity/tenant 绑定在闭包, 限制敏感/昂贵调用并审计。不要暴露 raw token、storage、unrestricted fetch、DOM root、泛化 eval/execute 或整份全局 store。provider 必须 abort-aware,返回前抛错要自行回滚部分分配。

供应链清单与非目标

registry、manifest、entry、chunk、iframe agent 全部用 HTTPS 与不可变 URL;限制 CDN 写权限;在流水线 做签名/attestation、依赖与 license 扫描;CSP 明确 script/connect/frame origin;registry response 必须认证授权;保留上一版本 artifact;把 registry deployment ID、MF loading trace 和 Fronts trace ID 关联起来。

Fronts 不实现 SES、Realm、DOM membrane virtualization、network interception 或完整 browser sandbox。 不可信代码应放入加固的跨源 iframe,或者更独立的应用/执行边界。

验证

container/services 单测证明 DOM/Shadow 所有权、capability filtering、revocation 和 provider cleanup; iframe 单测证明 origin/source、协议、grant、取消和清理;两套浏览器 E2E 在真实不同 origin 中验证边界。

本页目录