high
安全 / 可用性
同一来源 IP 上,管理员密码登失败或带错误 API 令牌的请求达到锁定阈值后,该 IP 上已经登录成功的管理后台请求、以及合法 API 令牌请求一律返回 429,后台不可用。攻击者只需对管理接口狂刷错误 Bearer,即可把同 NAT / 同代理出口的管理员锁在门外。
internal/admin/auth.go
Check(LockAdminIP)
authFail
Fail(LockAdminIP)
internal/admin/login.go
DEVIATIONS 没有写「锁定后已登录会话一并拒绝」。登录失败计入锁定是对的,且 login.go 已在登录入口检查。auth() 再对所有已认证请求套同一把锁,把「防暴力登录」扩成「封整个管理面」,与端侧「锁定不拦令牌」也不一致。错误令牌计入失败次数可以保留,但不应用来切断有效 Cookie。
login.go
auth()
auth() 先完成 Cookie / 合法令牌校验;仅登录接口和「令牌校验失败」路径检查/累计 LockAdminIP。有效 Cookie 与有效 API 令牌在锁定期内应仍能调用管理接口。
LockAdminIP
已合入并推送 main 4059a1576bc97879b840ec5200defd80bc9eb3f0。 管理员 IP 锁定不再阻断已认证 Cookie 与合法 API 令牌;密码登录入口以及错误、停用令牌的锁定计数保留。
4059a1576bc97879b840ec5200defd80bc9eb3f0
No dependencies set.
The note is not visible to the blocked user.
严重级
high
分类
安全 / 可用性
现象
同一来源 IP 上,管理员密码登失败或带错误 API 令牌的请求达到锁定阈值后,该 IP 上已经登录成功的管理后台请求、以及合法 API 令牌请求一律返回 429,后台不可用。攻击者只需对管理接口狂刷错误 Bearer,即可把同 NAT / 同代理出口的管理员锁在门外。
路径
internal/admin/auth.go第 46–50 行:所有需鉴权路由在鉴权前Check(LockAdminIP),锁定则直接 429internal/admin/auth.go第 131–133 行:错误或停用的 API 令牌走authFail→Fail(LockAdminIP)internal/admin/login.go第 25–30 行:登录入口本身已经单独检查锁定文档条款
为何不是故意设计
DEVIATIONS 没有写「锁定后已登录会话一并拒绝」。登录失败计入锁定是对的,且
login.go已在登录入口检查。auth()再对所有已认证请求套同一把锁,把「防暴力登录」扩成「封整个管理面」,与端侧「锁定不拦令牌」也不一致。错误令牌计入失败次数可以保留,但不应用来切断有效 Cookie。建议方向(不实现)
auth()先完成 Cookie / 合法令牌校验;仅登录接口和「令牌校验失败」路径检查/累计LockAdminIP。有效 Cookie 与有效 API 令牌在锁定期内应仍能调用管理接口。已合入并推送 main
4059a1576bc97879b840ec5200defd80bc9eb3f0。管理员 IP 锁定不再阻断已认证 Cookie 与合法 API 令牌;密码登录入口以及错误、停用令牌的锁定计数保留。