Files
workinf_Blender_Wasm/docs/status/N-025.md
mes123456 380cbed4ff
Some checks are pending
M6 deployable RC / quick (push) Waiting to run
M6 deployable RC / chromium (push) Blocked by required conditions
M6 deployable RC / release (push) Blocked by required conditions
Checkpoint web parity through Chromium input tasks
2026-08-19 10:39:03 -04:00

7.2 KiB
Raw Blame History

N-025 Scripting 与平台

状态:BLOCKED(默认拒绝策略、真实 Main Text 来源清单、签名 manifest、权限/资源预算、 平台报告、服务端 hash 门和请求决策审计已落地;本地隔离执行、真实 server job 与发布审计未实现)

已验证切片

  1. N-025-A脚本默认拒绝网络、autorun、driver expression 和 add-on 安装entry/dependency path 必须在项目内,未知权限和重复 ID 会拒绝。
  2. N-025-B部分脚本 manifest 要求 SHA-256、固定长度签名、publisher/keyId、权限 allowlist、CPU/内存/墙钟预算,并检查脚本依赖图。
  3. N-025-C合法脚本仍要求隔离 sandboxserver job 需要 script/source/input hash 一致,但当前 endpoint 未配置,返回 SERVER_JOB_UNAVAILABLE
  4. N-025-DWorker/WebGPU/OffscreenCanvas/OPFS 与 native/CUDA/Metal/HIP/OptiX capability 报告只反映 API 存在或显式 BLOCKED
  5. N-025-AMain reader从 Blender Text/TextLine 重建最多 1 MiB、65,536 行的完整 UTF-8 内嵌来源,记录项目相对外部路径、use_module autorun 请求和 SHA-256所有来源均为 只读且 executionStatus=BLOCKEDautorun 请求按默认拒绝处理,不引入 Python 执行入口。
  6. test:scripting-isolation 独立验证未批准 key 返回 SCRIPT_SIGNATURE_INVALID,批准 key 仍返回 SCRIPT_SANDBOX_UNAVAILABLEserver job 返回 SERVER_JOB_UNAVAILABLE;测试不创建 本地执行器,也不把签名校验误报为 sandbox。
  7. 每次本地脚本请求都可生成冻结的 ScriptExecutionAuditIR:绑定 canonical manifest/source SHA-256、权限、CPU/内存/墙钟预算、批准 key 命中、UTC 时间戳、请求摘要和明确拒绝码; 审计凭证仍只能是 DENY,不能绕过 sandbox 门。
  8. N-025-E审计链至多 65,536 条拒绝审计按 sequence、前项 SHA-256 与 canonical entry SHA-256 串联;读取时重新校验请求摘要和整条链,拒绝 requestId 重放、非递增 UTC 时间戳、内容篡改、断链与超预算日志。该链是内存/序列化协议,不声称已持久化发布审计。
  9. M13-02A manifest gate每个 script 必须声明 sourceByteLengthmodule=false;解析器限制 脚本数量、总源码字节、依赖数量、权限数量与 allowlistcanonicalize 项目内 entry/dependency path并拒绝重复依赖、模块执行、未知权限和所有预算溢出。Node unit 与生产 Chromium Worker 正负例、golden report 和 artifact manifest 已绑定。
  10. M13-02B canonical signature inputcanonicalizeScriptingManifestserializeScriptingManifest 是唯一规范入口locale-independent code-unit 排序所有可重排 数组,固定无空白 canonical JSONunknown fields 不进入签名输入order mutation、security field mutation 和 schema drift 均由 Node/Chromium 与 golden report 验证。
  11. M13-02C signer trust policy版本化 trust policy 绑定 ED25519 key/public-key、publisher、 active/revoked status、validity window、revocation timestamp、same-publisher rotation chain 和 bounded clock skewresolver 只返回 ELIGIBLE/cryptographicVerification=REQUIRED,不验签 不执行revoked/expired/mismatch/cycle/missing predecessor 全部 fail-closed。
  12. M13-02D declaration-bound signature verificationcanonical per-script input 包含 source SHA-256 和权限/预算/路径等声明,合法 ED25519 signature 才返回 VERIFIEDsource hash 或 signature 变化返回 SCRIPT_SIGNATURE_INVALIDrevoked signer 返回 SCRIPT_POLICY_DENIED
  13. M13-02E permission minimization无显式请求时授予空集只有 manifest 已声明且请求的 permission 才能授予,未知、重复或未声明请求稳定返回 SCRIPT_POLICY_DENIED
  14. M13-02F signature negative matrixmissing/expired/not-yet-valid key、publisher confusion 与跨脚本 signature swap 均稳定返回 SCRIPT_POLICY_DENIEDSCRIPT_SIGNATURE_INVALID canonical ordering 不改变自身签名结果,且不开放执行入口。
  15. M13-03A sandbox scope contractversioned scope 对 DOM、host Worker、OPFS、IndexedDB 和 network 五项能力逐项要求 false;启用、缺失或未知 schema 均 fail-closed执行仍禁用。
  16. M13-03B sandbox budget contractCPU、wall-time、memory、message 和 output bytes 各有固定 上限;任一超限返回 SCRIPT_BUDGET_EXCEEDED,不创建或启用脚本执行器。
  17. M13-03C host-call contract仅允许五个显式调用名每个调用使用结构化、调用专属参数 permission 必须来自 manifest 声明,未知字段、危险路径和未声明调用 fail-closed解析结果 保持 execution=DISABLED
  18. M13-03D sandbox isolation真实 Chromium Worker crash/timeout 后 job receipt 分别返回 SCRIPT_SANDBOX_CRASHED/SCRIPT_SANDBOX_TIMEOUTMain revision 不变temporary/published 资源归零;终止后的迟到结果返回 SCRIPT_SANDBOX_LATE_RESULT,执行仍为 DISABLED
  19. M13-03E cancellation gate取消 receipt 保持 Main revision 和 execution 状态,真实 Chromium 迟到窗口 lateMessages=0cacheWrites=0,伪造迟到结果稳定返回 SCRIPT_SANDBOX_LATE_RESULT
  20. M13-03F dispose gate真实 Chromium Worker 释放两端 MessagePort、timer、AbortController、 transferable buffer、pending request 和 cache reference首次和重复 dispose 均返回零资源, 且迟到 timer 消息为 0。
  21. M13-03G same-session recoveryWorker generation 4->5 后 Main revision/source hash/manifest hash 保持不变;两条 default-deny audit entry 的 request ID、sequence 和 previous hash chain 连续, replay/source tamper 均返回 SCRIPT_MANIFEST_INVALID
  22. M13-04A server job directory gate每个 job 获得随机 0700 one-shot directoryrequest ID 不 进入目录名;成功/失败清理后无残留且重复清理幂等。
  23. M13-04B source/output isolationsource directory/file 为 0555/0444,真实写入返回 EACCES output directory 为 0700 且可写,清理会先恢复 source directory 权限并无残留。
  24. M13-04C server resource budgetCPU、memory、process、file、wall 和 output 六类限制有固定 上限;每类超限均返回 SERVER_JOB_BUDGET_EXCEEDEDbounded receipt 标记 enforced=true 执行仍为 DISABLED
  25. M13-04D server network policy默认 network DENY;显式声明的 HTTPS/loopback origin 才可 ALLOWEDmissing/undeclared/unsafe origin 均为 SERVER_NETWORK_DENIED

仍然阻断

  • N-025-B/C签名验证密钥管理、无网络 CPython/native sandbox、server Blender job 和 output hash 提交。
  • N-025-D/E真实 server isolation、真实 GPU/native window/file watcher 适配、恶意脚本/依赖混淆/逃逸/重放、审计日志持久化和发布门;本地 请求级审计凭证与 crash/timeout receipt 已完成,不代表隔离执行完成。

验收

npm --prefix web run test:script-main-reader
npm --prefix web run test:scripting-isolation
WEB_TEST_PORT=5325 npm --prefix web run test:e2e -- --grep "N-025 script"