一个通用运行时,要去执行「任何人写的、跑在任何人手机上、还能碰支付和身份」的代码——这首先不是技术问题,而是信任问题。十年前中国正面撞上这道题:微信、支付宝把超级 App 向数百万外部开发者敞开,这些代码如今跑在约十亿台设备上、流转真实资金。这件事没有变成每天的泄露头条,才是真正值得写的故事。
经验不是「做个沙箱」,而是「搭一座信任栈」——每一层消灭一类灾难。
中国实际落地的信任栈
| 层级 | 平台怎么做 | 消灭的风险 | 对通用运行时的可移植性 |
|---|---|---|---|
| 1. 引擎隔离 | 逻辑跑在独立 JS 引擎(JSCore / V8),渲染在 WebView;每个小程序独立进程或 V8 Isolate | 代码逃逸进宿主、跨应用偷数据 | 可——引擎级 |
| 2. 禁裸 DOM/BOM | 逻辑层没有 document、window、localStorage,UI 只能靠数据绑定改 | 审核后注入 UI、XSS、静默改页面 | 可 |
| 3. 网络白名单 | 所有请求经宿主转发,仅 HTTPS、仅白名单域名 | 数据外泄到攻击者服务器、钓鱼 | 可——策略级 |
| 4. 分级 API + 授权 | 摄像头/定位/通讯录等敏感调用走宿主桥接,需用户明确授权 | 静默窃取个人隐私 | 可 |
| 5. 审核离线包 | 代码经平台审核后才从 CDN 下发,签名且带版本 | 被篡改或注入的载荷、供应链滥用 | 部分——需目录审核流水线 |
| 6. 运行时监控 | 异常检测 + 用户举报通道 | 上线后的滥用 | 可——遥测 |
前四层是纯运行时工程,能干净地移植到任何宿主。第五层依赖一个「目录」——经过审核、可分发的内容面——这正是 CrossMiniApp 论点里「开放目录」那一半。第六层是运营纪律。
为什么对通用运行时至关重要
CrossMiniApp 的承诺是「一次编写,落到任意宿主的轨上」。这个承诺只有在运行时本身就强制信任栈时才值钱。一个直接加载第三方代码的裸 WebView 不是运行时,是攻击面。真正的 IP 是沙箱化执行:隔离引擎、禁裸 DOM、把每个网络调用逼过策略、把敏感 API 关在授权后面。
更深一层:这正是「开放目录」能成立的原因。正因为运行时约束了代码能做什么,你才敢让大量开发者发布。运行时的约束,让目录的开放变安全。
铁律
运行别人写的代码时,安全不是事后加的功能,而是第一天就要交付的地基——引擎隔离、禁裸 DOM、网络白名单、分级 API、审核代码、运行时监控。中国平台已证明它能扩到十亿用户。通用运行时也可以。