[H-02][medium] 审计日志可能整体丢失,令牌身份与操作内容记录不清,登录失败与批量失败不记录 #45

Closed
opened 2026-09-30 13:57:02 +08:00 by nixevol · 1 comment
Owner

编号:H-02 严重级:medium 工作线:管理后端(internal/admin) 来源:审查 A-14
依赖:无 被依赖:无

结论与统一方案

采用审查 A-14 的方案:

  1. Deps 增加独立的 AuditLogger,始终输出 Info,不受 log.level 配置影响,由 serve 创建。
  2. 增加 token_id 字段;令牌名称限制 1–64 字符。
  3. 增加不含秘密的 detail:enabled、code_changed、generated、members、failed、new_owner、导入编号(前 N 个加总数)。
  4. 批量结果区分 ok、partial、failed。
  5. 新增 admin_auth_fail 事件,记录 IP 与原因,不写任何秘密。

改动文件

internal/admin/{audit,auth,login,endpoints,endpoints_csv,registration,groups,tokens,handler}.go;cmd/nixmsg/serve.go(admin.Deps 注入一行)。

与其他问题的交互 / 冲突说明

  • 触及文件多,但只增加审计调用;与 H-03、H-04、H-05、U-01、U-03 改到同一批文件,合并时保留双方改动(建议在管理后端线最后合入)。
  • serve.go 的 admin.Deps 也会被 L-04 修改,合并时保留两处。

验收与测试

  • 日志级别设为 warn 时,审计仍然输出。
  • 断言各字段齐全;日志里没有密码、令牌、安全码。

问题明细(各区审查原文,证据含文件与行号)

以下是本次复审各区审查报告的原文段落。A、M、I、P、S 开头的是原始发现编号(A 管理后台与网页、M 消息核心、I 身份认证群在线、P 传输平台部署、S SDK)。解决方案以本 issue 上方的"结论与统一方案"为准;原文里的方案与之不一致时,按上方执行。

[A-14] 审计日志可能整体丢失,令牌身份和操作内容记录不清

  • 严重级:medium
  • 分类:安全 / 设计
  • 现象与影响:
    1. 审计用 Info 写进全局日志器。配置 log.level: warn 或 error 时,审计会全部丢失。
    2. 操作者只记 token:<名称>,令牌可以重名、可以改名,无法确定是哪个令牌。
    3. 几类操作的"做了什么"太粗:修改端不区分停用或启用,注册设置不区分开关或换码,改令牌不区分停用或改名,加人不记成员,转让不记新群主,导入只记行数。
    4. 批量操作结果恒为 ok,失败的编号不记录。
    5. 登录失败、锁定和错误令牌都没有记录。
  • 证据:
    • audit.go:4-11;serve.go:370-382(按配置设日志级别)。
    • auth.go:171-176;tokens.go:45-53(名称不校验唯一和长度)。
    • endpoints.go:391,466;endpoints_csv.go:67;registration.go:117;groups.go:327,398。
    • login.go:77-85;auth.go:127-132。
  • 文档依据:PRD F17(约 368 行)"每个改变状态的操作都记日志:谁做的(管理员或哪个令牌)、做了什么、对象是谁";DEVELOPMENT §8(约 894 行)。
  • 为何不是故意设计:A1.5 只决定了用 slog,没有接受上面这些缺口。
  • 解决方案:
    1. Deps 增加独立的 AuditLogger,始终输出 Info,不受配置级别影响,由 serve.go 创建。
    2. 增加 token_id 字段;令牌名称限制 1–64 字符。
    3. 增加不含秘密的 detail 字段:enabled、code_changed、generated、members、failed、new_owner、导入编号(前 N 个加总数)。
    4. 批量结果区分 ok、partial、failed。
    5. 新增 admin_auth_fail 事件,记录 IP 和原因,不写任何秘密。
  • 改动文件:internal/admin/{audit,auth,login,endpoints,endpoints_csv,registration,groups,tokens,handler}.go、cmd/nixmsg/serve.go(总控)。
  • 交互/冲突风险:日志采集方按 admin_audit 过滤不受影响,新增字段只增不改。
  • 需补测试:把日志级别设为 warn,审计仍然输出;断言各字段齐全;断言日志里没有密码、令牌、安全码。
  • 置信度:代码阅读确定

复审基线:main 4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。

**编号**:H-02 **严重级**:medium **工作线**:管理后端(internal/admin) **来源**:审查 A-14 **依赖**:无 **被依赖**:无 ### 结论与统一方案 采用审查 A-14 的方案: 1. `Deps` 增加独立的 `AuditLogger`,始终输出 Info,不受 `log.level` 配置影响,由 serve 创建。 2. 增加 `token_id` 字段;令牌名称限制 1–64 字符。 3. 增加不含秘密的 `detail`:enabled、code_changed、generated、members、failed、new_owner、导入编号(前 N 个加总数)。 4. 批量结果区分 ok、partial、failed。 5. 新增 `admin_auth_fail` 事件,记录 IP 与原因,不写任何秘密。 ### 改动文件 `internal/admin/{audit,auth,login,endpoints,endpoints_csv,registration,groups,tokens,handler}.go`;`cmd/nixmsg/serve.go`(`admin.Deps` 注入一行)。 ### 与其他问题的交互 / 冲突说明 - 触及文件多,但只增加审计调用;与 H-03、H-04、H-05、U-01、U-03 改到同一批文件,合并时保留双方改动(建议在管理后端线最后合入)。 - serve.go 的 `admin.Deps` 也会被 L-04 修改,合并时保留两处。 ### 验收与测试 - 日志级别设为 warn 时,审计仍然输出。 - 断言各字段齐全;日志里没有密码、令牌、安全码。 --- ### 问题明细(各区审查原文,证据含文件与行号) > 以下是本次复审各区审查报告的原文段落。A、M、I、P、S 开头的是原始发现编号(A 管理后台与网页、M 消息核心、I 身份认证群在线、P 传输平台部署、S SDK)。**解决方案以本 issue 上方的"结论与统一方案"为准**;原文里的方案与之不一致时,按上方执行。 #### [A-14] 审计日志可能整体丢失,令牌身份和操作内容记录不清 - 严重级:medium - 分类:安全 / 设计 - 现象与影响: 1. 审计用 `Info` 写进全局日志器。配置 `log.level: warn` 或 `error` 时,审计会全部丢失。 2. 操作者只记 `token:<名称>`,令牌可以重名、可以改名,无法确定是哪个令牌。 3. 几类操作的"做了什么"太粗:修改端不区分停用或启用,注册设置不区分开关或换码,改令牌不区分停用或改名,加人不记成员,转让不记新群主,导入只记行数。 4. 批量操作结果恒为 ok,失败的编号不记录。 5. 登录失败、锁定和错误令牌都没有记录。 - 证据: - `audit.go:4-11`;`serve.go:370-382`(按配置设日志级别)。 - `auth.go:171-176`;`tokens.go:45-53`(名称不校验唯一和长度)。 - `endpoints.go:391,466`;`endpoints_csv.go:67`;`registration.go:117`;`groups.go:327,398`。 - `login.go:77-85`;`auth.go:127-132`。 - 文档依据:PRD F17(约 368 行)"每个改变状态的操作都记日志:谁做的(管理员或哪个令牌)、做了什么、对象是谁";DEVELOPMENT §8(约 894 行)。 - 为何不是故意设计:A1.5 只决定了用 slog,没有接受上面这些缺口。 - 解决方案: 1. `Deps` 增加独立的 `AuditLogger`,始终输出 Info,不受配置级别影响,由 `serve.go` 创建。 2. 增加 `token_id` 字段;令牌名称限制 1–64 字符。 3. 增加不含秘密的 `detail` 字段:enabled、code_changed、generated、members、failed、new_owner、导入编号(前 N 个加总数)。 4. 批量结果区分 ok、partial、failed。 5. 新增 `admin_auth_fail` 事件,记录 IP 和原因,不写任何秘密。 - 改动文件:`internal/admin/{audit,auth,login,endpoints,endpoints_csv,registration,groups,tokens,handler}.go`、`cmd/nixmsg/serve.go`(总控)。 - 交互/冲突风险:日志采集方按 `admin_audit` 过滤不受影响,新增字段只增不改。 - 需补测试:把日志级别设为 warn,审计仍然输出;断言各字段齐全;断言日志里没有密码、令牌、安全码。 - 置信度:代码阅读确定 --- <sub>复审基线:main `4059a15`(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。</sub>
nixevol added the P2-mediumlane/adminreview-2026-09-30 labels 2026-09-30 13:57:02 +08:00
Author
Owner

已合入 origin/main 0c9b459。落地提交 b7c8b6f fix: 独立审计日志并补齐令牌身份与失败记录 (#45)。

已合入 origin/main `0c9b459`。落地提交 `b7c8b6f` fix: 独立审计日志并补齐令牌身份与失败记录 (#45)。
Sign in to join this conversation.