跳到主要内容

信任分级 T0 / T1 / T2

trust形态跑在哪信任本质
T0 声明级declarative纯 JSON / SVG / 字体,禁止代码入口只被读取,不执行数据即载荷,注入面由宿主白名单封堵
T1 沙箱级sandboxedmanifest + 沙箱 UI 入口(html)跨源沙箱 iframe(plugin://<插件id>,每插件一个 origin)能力面 = 桥消息白名单,有真实运行时隔离
T2 特权级privilegedmanifest + Node 入口(可同时带沙箱 UI)独立 Extension Host 进程等同完全本机信任——把关靠安装前知情同意、审核与签名,不承诺运行时沙箱

怎么选:能不上 T2 就不上

T2 能做 T1 的一切,所以分级不是能力天花板,是用户要交出多少信任。真正的差别在权限的执行方式:

T1 的权限T2 的权限
workspace:read 是什么宿主替它做事、做之前真的查一份知情披露
能绕过吗不能(在 iframe 里,除桥之外无出口)能(进程内是完整 Node)

判断顺序:

  1. 纯数据(主题 / 图标 / 预设 / 卡模板)→ T0。
  2. 有界面、数据都是 app 已知的(素材清单、内容条目、运营台账——经 suite 桥的白名单 op 就能读到)→ T1 足够。「显示个列表」不需要本机全信任。
  3. 要 app 不知道的事(起本机进程、读工作区外的文件、任意计算)→ 才上 T2。只发 HTTP 请求的能力可以用 invoke.kind: "http" 留在更低信任级。
对 T2 要诚实

T2 = 完全本机信任的代码。宿主的 curated API 与权限门是防误用与审计层,对恶意代码不构成运行时边界。用户安装你的 T2 插件,就是在信任你这个作者——所以权限清单只申报真用到的,描述里不要暗示「已被沙箱」。

一个插件可以两面都有

形态trustentries
只有页面sandboxed只有 sandbox
只有后端privileged只有 main;纯命令型插件可以一行 JS 都没有
两面都有privilegedmain + sandbox

关键:T2 插件的页面仍然是沙箱 iframe。 特权只存在于 Node 进程那一侧,永不传染给界面——界面被打穿,攻击者拿到的也只是一条受限的 rpc 管子。

三条铁则

  1. 信任只升不降:能力来自加载器等级,不来自 manifest 自称;工作区来源里声明 T1/T2 只会标 incompatible,绝不静默降级运行。
  2. 第一方无特权:内置与第三方走同一条校验、注册、启停路径。
  3. channek.* 命名空间保留:第三方目录里出现即 error(防伪装官方)。