修正 sanitizer 调用点计数
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / Backend tests (pull_request) Failing after 8s
Project CI / Frontend tests (pull_request) Failing after 1m54s
Project CI / Native shell tests (pull_request) Successful in 10m28s

5916b7d50 的提交说明与 decision-log 写「其余 13 个生产调用点」,静态计数实际是
14:editor_project.rs 13 处,external_editor_api.rs 1 处。原文括号里已点名
external_editor_api,数字却只算了 editor_project.rs 那一侧。

一并注明补上本端点后生产调用点为 15 个(另有 1 处在测试中,不计入)。

提交说明属不可变历史,未改写;此处只更正 decision-log。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-01 10:44:37 +00:00
parent ad5b44b93c
commit 7b744840fe
@@ -5928,7 +5928,7 @@
## 2026-08-01 完美像素端点补齐保留审计字段剥离
- 缺陷:`POST /api/editor/images/pixel-art-snaps` 自新增之日起未调用 `sanitize_editor_client_generation_inputs`,只对 `generationInputs` 做了可序列化性校验(`serialize_editor_asset_metadata`)便原样写入 `editor_project_resource``editor_asset`。登录用户因此可以自行声明 `screenColorHex / mattingProvider / mattingModel`,让后台 raw mapper 看到伪造的处理元数据。该 sanitizer 与其余 13 个生产调用点(普通图片、角色、图标图集、UI 设计、快速编辑、抠图、上传等,`external_editor_api`)在此端点加入前就已存在,属于新端点漏配既有约定,不是设计取舍。
- 缺陷:`POST /api/editor/images/pixel-art-snaps` 自新增之日起未调用 `sanitize_editor_client_generation_inputs`,只对 `generationInputs` 做了可序列化性校验(`serialize_editor_asset_metadata`)便原样写入 `editor_project_resource``editor_asset`。登录用户因此可以自行声明 `screenColorHex / mattingProvider / mattingModel`,让后台 raw mapper 看到伪造的处理元数据。该 sanitizer 与其余 14 个生产调用点(`editor_project.rs` 13 处覆盖普通图片、角色、图标图集、UI 设计、快速编辑、抠图、上传等,`external_editor_api.rs` 1 处)在此端点加入前就已存在,属于新端点漏配既有约定,不是设计取舍。补上本端点后生产调用点为 15 个。
- 决策:在 handler 解析 payload 之后、任何 IO 之前调用同一个 sanitizer,位置与其余入口一致。这三个字段是服务端产出的处理事实——`screenColorHex` 由背景色决策写入,`mattingProvider / mattingModel``apply_editor_matting_metadata_to_generation_inputs` 在 bgfilter 实际执行后写入——一律不接受客户端声明。完美像素是纯几何规整、不抠图(`model = "Perfect Pixel"``provider = "Genarrative"`),任何 matting 元数据出现在这类记录上本身就是伪造。
- 影响边界:只能污染攻击者自己的记录(`owner_user_id` 取自 access token,不可控),不构成越权、信息泄露或计费漏洞;该端点 `generation_cost_mud_points = 0`。危害限于按这些字段做的后台统计、排障与审计出现假数据。
- 验证:sanitizer 单元测试 `editor_client_generation_inputs_cannot_forge_internal_audit_fields` 已覆盖字段剥离与其余字段保留;端点接线由 `explicit_pixel_art_snap_is_inline_strict_and_persists_only_after_processing` 的顺序断言钉住,`sanitize_editor_client_generation_inputs` 必须排在 `resolve_editor_pixel_art_processing_deadline` 及之后全部 IO 之前,被挪到 IO 之后会直接失败。