Skip to content

ScriptContext.userunknown —— 沙箱接缝上没有任何类型把 dispatcher 的 user 形状钉住(observation) #5521

Description

@baozhoutao

Observation-class finding,来自 #5372 / PR #5518 的实施。今天没有用户会撞到,不影响任何运行行为 —— 记录的是一处"声明缺席"而非缺陷。

观察到的事实

ScriptContext(packages/runtime/src/sandbox/script-runner.ts:59)把交给 body 的调用者声明为:

user?: unknown;

ctx.user 在两个方向上都是有契约的:

也就是说值已经统一了,但类型系统对此一无所知:unknown 之下,第四个 dispatch 面明天再手搓一个 user 字面量,编译器不会说一句话 —— 而"三个 dispatcher 手搓出三种形状"正是 #5372 的成因。#5372 之所以能存在几个版本,部分原因就是没有任何声明可以违背。

为什么按 observation 归档而不是缺陷

可能的方向(未裁决)

  1. ScriptContext.user?: EvalUser(spec 契约,最小公分母),dispatch 面的传输键作为结构化扩展仍然合法;
  2. 在 runtime 侧导出 ActorUser 并声明 user?: ActorUser | EvalUser;
  3. 维持 unknown,改以闸门(而非类型)约束"user 形状只有一个生产者" —— 与 check:single-authz-resolver 同形。

需要先测 hook 面实际交付的形状再选。

会话:session_016FNvXhtSdnEGEfLEsMmvxh(仅记录,不认领)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions