mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-23 18:21:13 +08:00
feat: 远程分片加绑定门与认证门,worker 无特权口径落文档
This commit is contained in:
@@ -66,8 +66,49 @@ token 生命周期与 server 进程同长:启动时(认领 sidecar 之前)
|
||||
|
||||
执行上限:eval 请求带 `max_steps` 步数上限;控制请求不占 worker,不被长 eval 阻塞。
|
||||
|
||||
## 分片安全边界
|
||||
|
||||
远程分片(test262 runner 的 `--remote-supervise` 监督者与 `--worker` 执行半区)
|
||||
的安全边界定稿为三个口径,与 server 子系统同型双闸门:loopback 绑定加 token
|
||||
认证门。与 server 的差别在威胁模型与分发渠道:worker 执行不可信测试内容,
|
||||
威胁对象是远程指派者而非本机邻居;token 不经网络分发,靠前台打印加带外注入。
|
||||
|
||||
### 缺省绑定地址
|
||||
|
||||
`--remote-supervise` 端点只允许 loopback 绑定:用户只给端口(裸端口或
|
||||
`:port` 形态)时解析期补缺省 127.0.0.1;显式非 loopback 地址(0.0.0.0、
|
||||
局域网 IP)在解析期报错拒绝,bind 处另有双保险拒绝非 loopback。该姿态比
|
||||
server 的「0.0.0.0 可配置但不受支持」更严:server 的威胁模型是本机邻居,
|
||||
worker 执行不可信测试内容,非 loopback 绑定会把窗口指派面(含本地路径
|
||||
执行)暴露到网络,防护责任无法转给使用方。端点只接受 `[IP]:port` 形态,
|
||||
主机名不解析(解析期无法验证 loopback)。
|
||||
|
||||
### worker 认证 token
|
||||
|
||||
监督者启动时生成 64 位十六进制 token(读 `/dev/urandom` 32 字节,非 Linux
|
||||
回落时间加进程号混合熵)并打印到前台 stderr;worker 进程经
|
||||
`OXIDE_TEST262_WORKER_TOKEN` 环境变量取得(带外注入,与 server `--rm`
|
||||
模式同型:token 不经网络分发)。worker 连接后首帧必须是 `Auth` 事件帧,
|
||||
监督者逐字节异或累加判等(长度不等直接判不等,避免逐字节短路的时序
|
||||
侧信道),匹配才写回 `AuthOk` 命令帧并进窗口循环;不匹配或首帧非 `Auth`
|
||||
直接断连、不回帧,不向攻击者泄露差异。读首帧带 30 秒读超时,半开连接
|
||||
不永久占线程。
|
||||
|
||||
token 生命周期与监督者进程同长:启动时生成、进程退出即销毁,无轮换机制。
|
||||
|
||||
### worker 无特权口径
|
||||
|
||||
worker 是最小单向面:
|
||||
|
||||
- 只能发协议内事件帧(`Auth` / `Heartbeat` / `Fail` / `Scene` / `Done`),
|
||||
未知类型在解析层拒绝,连接按死亡处理;
|
||||
- 连接数受 worker 数上限约束(`--remote-supervise` 的 worker 数旗标),
|
||||
每窗口一条连接;
|
||||
- 不读监督者本机文件:窗口路径清单随 `Assign` 帧携带,worker 不读监督者
|
||||
本机临时文件;
|
||||
- 无文件系统写权限面:worker 不写监督者侧任何文件,失败记录与现场都经
|
||||
帧回传。
|
||||
|
||||
## 扩展位
|
||||
|
||||
本文档只定稿持久 server 现状。分片安全边界(分片启用时的缺省绑定地址、worker
|
||||
认证 token、worker 无特权口径)属 963.17 范围,本文档不预写;963.17 实施时在本
|
||||
文档追加相应章节。
|
||||
本文档定稿持久 server 现状与远程分片安全边界(见上「分片安全边界」一节)。
|
||||
|
||||
Reference in New Issue
Block a user