编号: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/admin/memlock.go
internal/auth/locks.go(以及 internal/admin/memlock.go,如适用)。
internal/auth/locks.go
与 U-03 同文件,身份线内顺序合入。
以下是本次复审各区审查报告的原文段落。A、M、I、P、S 开头的是原始发现编号(A 管理后台与网页、M 消息核心、I 身份认证群在线、P 传输平台部署、S SDK)。解决方案以本 issue 上方的"结论与统一方案"为准;原文里的方案与之不一致时,按上方执行。
MemoryLocks.entries
auth/locks.go:24-41
60-112
auth/locks.go
复审基线:main 4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。
4059a15
已合入 origin/main 0c9b459。落地提交 05a3741 fix: 锁定计数表过期清理并限制总量 (#42)。
0c9b459
05a3741
No dependencies set.
The note is not visible to the blocked user.
编号: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 同文件,身份线内顺序合入。
验收与测试
问题明细(各区审查原文,证据含文件与行号)
[I-12] 锁定计数表从不清理
MemoryLocks.entries只在管理员解除锁定或精确清除时删除,过期的条目一直留着。auth/locks.go:24-41、60-112。auth/locks.go。复审基线:main
4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。已合入 origin/main
0c9b459。落地提交05a3741fix: 锁定计数表过期清理并限制总量 (#42)。