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

91 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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=BLOCKED`autorun 请求按默认拒绝处理,不引入 Python 执行入口。
6. `test:scripting-isolation` 独立验证未批准 key 返回 `SCRIPT_SIGNATURE_INVALID`,批准 key
仍返回 `SCRIPT_SANDBOX_UNAVAILABLE`server 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 必须声明 `sourceByteLength``module=false`;解析器限制
脚本数量、总源码字节、依赖数量、权限数量与 allowlistcanonicalize 项目内 entry/dependency
path并拒绝重复依赖、模块执行、未知权限和所有预算溢出。Node unit 与生产 Chromium Worker
正负例、golden report 和 artifact manifest 已绑定。
10. M13-02B canonical signature input`canonicalizeScriptingManifest`
`serializeScriptingManifest` 是唯一规范入口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 才返回 `VERIFIED`source hash 或
signature 变化返回 `SCRIPT_SIGNATURE_INVALID`revoked 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_DENIED``SCRIPT_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_TIMEOUT`Main revision 不变temporary/published
资源归零;终止后的迟到结果返回 `SCRIPT_SANDBOX_LATE_RESULT`,执行仍为 `DISABLED`
19. M13-03E cancellation gate取消 receipt 保持 Main revision 和 execution 状态,真实 Chromium
迟到窗口 `lateMessages=0``cacheWrites=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_EXCEEDED`bounded receipt 标记 `enforced=true`
执行仍为 `DISABLED`
25. M13-04D server network policy默认 network `DENY`;显式声明的 HTTPS/loopback origin 才可
`ALLOWED`missing/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 已完成,不代表隔离执行完成。
## 验收
```bash
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"
```