[U-04][medium] 锁定计数表从不清理,轮换 IP 可让内存持续增长 #42

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

编号:U-04 严重级:medium 工作线:身份、群、在线与认证基础(internal/app/identity、group、presence、internal/auth) 来源:审查 I-12
依赖:U-03 (#41)(同文件) 被依赖:无

结论与统一方案

采用审查 I-12 的方案:Fail 与 Check 时顺手删除已过期、且最近失败在窗口之外的条目;每 1024 次或每分钟全表扫一遍;设总量上限(超出时优先淘汰最旧的非锁定条目)。注册安全码错误不需要登录也不算 argon2,错误的 API 令牌按 IP 计入管理员锁定,两者都按 IP 建条目,轮换 IPv6 地址每秒就能造出数千条永久条目。

internal/admin/memlock.go 若是另一份锁实现,同样处理。

改动文件

internal/auth/locks.go(以及 internal/admin/memlock.go,如适用)。

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

与 U-03 同文件,身份线内顺序合入。

验收与测试

  • 拨钟后 1 万个 IP 的条目被清空;锁定中的条目保留。
  • 超过总量上限后条目数不再增长。

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

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

[I-12] 锁定计数表从不清理

  • 严重级:medium
  • 分类:安全(资源)
  • 现象与影响
    • MemoryLocks.entries 只在管理员解除锁定或精确清除时删除,过期的条目一直留着。
    • 注册安全码错误不需要登录、也不算 argon2;错误的 API 令牌按 IP 计入管理员锁定。两者都按 IP 建条目,轮换 IPv6 地址每秒就能造出数千条永久条目。
  • 证据:auth/locks.go:24-41、60-112。
  • 文档依据:DEVELOPMENT 第 5 节(295)。
  • 为何不是故意设计:没有偏差记录。
  • 解决方案:Fail 和 Check 时顺手删除已过期、且最近失败在窗口之外的条目;每 1024 次或每分钟扫一遍;设总量上限。
  • 改动文件:auth/locks.go。
  • 与其他模块的交互/冲突风险:无。
  • 需补测试:拨钟后 1 万个 IP 的条目被清空;锁定中的条目保留。
  • 置信度:代码阅读确定。

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

**编号**:U-04 **严重级**:medium **工作线**:身份、群、在线与认证基础(internal/app/identity、group、presence、internal/auth) **来源**:审查 I-12 **依赖**:U-03 (#41)(同文件) **被依赖**:无 ### 结论与统一方案 采用审查 I-12 的方案:Fail 与 Check 时顺手删除已过期、且最近失败在窗口之外的条目;每 1024 次或每分钟全表扫一遍;设总量上限(超出时优先淘汰最旧的非锁定条目)。注册安全码错误不需要登录也不算 argon2,错误的 API 令牌按 IP 计入管理员锁定,两者都按 IP 建条目,轮换 IPv6 地址每秒就能造出数千条永久条目。 `internal/admin/memlock.go` 若是另一份锁实现,同样处理。 ### 改动文件 `internal/auth/locks.go`(以及 `internal/admin/memlock.go`,如适用)。 ### 与其他问题的交互 / 冲突说明 与 U-03 同文件,身份线内顺序合入。 ### 验收与测试 - 拨钟后 1 万个 IP 的条目被清空;锁定中的条目保留。 - 超过总量上限后条目数不再增长。 --- ### 问题明细(各区审查原文,证据含文件与行号) > 以下是本次复审各区审查报告的原文段落。A、M、I、P、S 开头的是原始发现编号(A 管理后台与网页、M 消息核心、I 身份认证群在线、P 传输平台部署、S SDK)。**解决方案以本 issue 上方的"结论与统一方案"为准**;原文里的方案与之不一致时,按上方执行。 #### [I-12] 锁定计数表从不清理 - **严重级**:medium - **分类**:安全(资源) - **现象与影响** - `MemoryLocks.entries` 只在管理员解除锁定或精确清除时删除,过期的条目一直留着。 - 注册安全码错误不需要登录、也不算 argon2;错误的 API 令牌按 IP 计入管理员锁定。两者都按 IP 建条目,轮换 IPv6 地址每秒就能造出数千条永久条目。 - **证据**:`auth/locks.go:24-41`、`60-112`。 - **文档依据**:DEVELOPMENT 第 5 节(295)。 - **为何不是故意设计**:没有偏差记录。 - **解决方案**:Fail 和 Check 时顺手删除已过期、且最近失败在窗口之外的条目;每 1024 次或每分钟扫一遍;设总量上限。 - **改动文件**:`auth/locks.go`。 - **与其他模块的交互/冲突风险**:无。 - **需补测试**:拨钟后 1 万个 IP 的条目被清空;锁定中的条目保留。 - **置信度**:代码阅读确定。 --- <sub>复审基线:main `4059a15`(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。</sub>
nixevol added the P2-mediumlane/identityreview-2026-09-30 labels 2026-09-30 13:57:01 +08:00
Author
Owner

已合入 origin/main 0c9b459。落地提交 05a3741 fix: 锁定计数表过期清理并限制总量 (#42)。

已合入 origin/main `0c9b459`。落地提交 `05a3741` fix: 锁定计数表过期清理并限制总量 (#42)。
Sign in to join this conversation.