Skip to content

[1.5.2 Patch][P0] 高危操作增加后端 confirmation token,避免只依赖前端确认 #74

Description

@weidonglang

背景

当前多个高风险操作已经在 UI 和文档中要求二次/三次确认,但从后端命令接口角度看,部分执行函数仍主要依赖前端完成确认后再调用。例如 MySQL 修复、空间搬家、Junction、C 盘扩容、服务操作等。

如果前端逻辑 bug、旧页面入口、白屏恢复后的异常调用或未来 Codex 改动绕过确认,后端缺少统一的强制确认令牌校验。

问题性质

这是安全架构问题,不一定是当前用户可直接触发的 bug,但属于高危功能必须补齐的后端安全门禁。

影响范围

至少覆盖:

  • MySQL 修复中心:服务注册、启动、系统库修复、Data 备份。
  • C 盘扩容执行。
  • 空间搬家。
  • Junction 创建。
  • 桌面/下载归档执行。
  • 用户级环境变量写入与恢复。
  • 数据库服务启动/停止/重启。
  • Docker / WSL 管理动作。
  • 结束进程。

修复目标

建立统一后端确认令牌机制:

预览计划 → 风险声明 → 用户确认 → 后端签发 confirmation token → 执行函数校验 token → 执行后 token 失效

功能要求

  1. 新增确认令牌结构。
  2. token 绑定:
    • action_id
    • plan_id
    • risk_level
    • created_at
    • expires_at
    • plan fingerprint
    • required confirmation level
  3. token 只能使用一次。
  4. token 过期后拒绝执行。
  5. token 与当前计划不匹配时拒绝执行。
  6. 高危操作必须在后端校验 token。
  7. Critical 操作必须校验三次确认完成状态。
  8. 需要备份的操作必须校验 backup receipt 或 backup manifest。

建议接口

create_risk_confirmation(action_id, plan_id, confirmation_payload) -> ConfirmationToken
validate_risk_confirmation(token, action_id, plan_id, required_level) -> Result<(), String>
consume_risk_confirmation(token)

三次确认载荷建议

Critical 操作要求至少包含:

{
  "readRisk": true,
  "backupConfirmed": true,
  "typedAcknowledgement": "我已知晓风险并确认执行"
}

MySQL 可使用更具体文案:

我已知晓 MySQL 修复风险并确认执行

C 盘扩容可使用:

我已知晓分区扩容风险并确认执行

禁止事项

  • 不允许前端只弹窗确认后直接调用高危 execute。
  • 不允许 token 长期有效。
  • 不允许 token 跨 plan 使用。
  • 不允许 backup 失败时生成 Critical token。
  • 不允许危险操作在后端只靠布尔值确认。

测试要求

新增测试:

  1. 没有 token 执行 Critical 操作 → 拒绝。
  2. token 过期 → 拒绝。
  3. token 与 plan_id 不匹配 → 拒绝。
  4. token 被使用一次后再次使用 → 拒绝。
  5. 未完成三次确认 → 拒绝。
  6. 需要备份但没有备份 receipt / manifest → 拒绝。
  7. Medium/High/Critical 不同级别按规则校验。
  8. 旧的只读诊断不需要 token。

验收标准

  • 所有高危执行函数都有后端安全门禁。
  • 前端确认不能成为唯一安全边界。
  • MySQL / Junction / 空间搬家 / 分区扩容至少完成 token 接入。
  • cargo test --all-targets 通过。
  • npm run build 通过。
  • 文档说明首次安全声明、页面说明、操作确认、后端 token 的关系。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions