编号:C-05 严重级:medium 工作线:消息核心(internal/app/message、serve 的 messageLoops) 来源:审查 M-08、I-10、P-11 依赖:无 被依赖:无
三份审查结论一致。统一方案:message 包导出 AllowRequest(编号),与 send 共用同一个桶;appUplink.HandleUplink 在解码之后、分发之前,对 Ack、ReceiptAck 以外的所有帧调用它,超限回 rate_limited;同时去掉 Submit 里的检查,避免 send 被计两次。同步更新 DEVIATIONS M1 第 2 条。
AllowRequest(编号)
appUplink.HandleUplink
rate_limited
Submit
开放注册后任何人都能拿到一个端,现在可以不限速地发 unlock(每次一次 argon2)、presence.get(每次最多 200 次查库)、directory.list 等,挤占哈希池与数据库。
presence.get
directory.list
internal/app/message/rate.go、submit.go;cmd/nixmsg/uplink.go(HandleUplink)。
internal/app/message/rate.go
submit.go
cmd/nixmsg/uplink.go
HandleUplink
publishResp
以下是本次复审各区审查报告的原文段落。A、M、I、P、S 开头的是原始发现编号(A 管理后台与网页、M 消息核心、I 身份认证群在线、P 传输平台部署、S SDK)。解决方案以本 issue 上方的"结论与统一方案"为准;原文里的方案与之不一致时,按上方执行。
submit.go:23-26
uplink.go:80-223
rates.allow
message.Submit
group.create
message/submit.go:24
cmd/nixmsg/uplink.go:64-78
AllowRequest(ep)
message/rate.go
message/submit.go
message.App.Submit
appUplink.dispatch
uplink.go:64-224
message/submit.go:25
AllowRequest(endpointID)
复审基线:main 4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。
4059a15
已合入 origin/main 0c9b459。落地提交 aa24e97 fix: 上行分发前统一限速,send 不再单独扣桶 (#36)。
0c9b459
aa24e97
No dependencies set.
The note is not visible to the blocked user.
编号:C-05 严重级:medium 工作线:消息核心(internal/app/message、serve 的 messageLoops) 来源:审查 M-08、I-10、P-11
依赖:无 被依赖:无
结论与统一方案
三份审查结论一致。统一方案:message 包导出
AllowRequest(编号),与 send 共用同一个桶;appUplink.HandleUplink在解码之后、分发之前,对 Ack、ReceiptAck 以外的所有帧调用它,超限回rate_limited;同时去掉Submit里的检查,避免 send 被计两次。同步更新 DEVIATIONS M1 第 2 条。开放注册后任何人都能拿到一个端,现在可以不限速地发 unlock(每次一次 argon2)、
presence.get(每次最多 200 次查库)、directory.list等,挤占哈希池与数据库。改动文件
internal/app/message/rate.go、submit.go;cmd/nixmsg/uplink.go(HandleUplink)。与其他问题的交互 / 冲突说明
HandleUplink:生命周期函数归 B-09,publishResp归 B-06。Submit验证限速的测试迁到上行层,或加测试开关。验收与测试
rate_limited。问题明细(各区审查原文,证据含文件与行号)
[M-08] 请求频率只限制 send,撤回、状态、目录、群等请求不限
Submit里检查。submit.go:23-26;uplink.go:80-223的分发里没有任何限流;全仓rates.allow只有这一处。AllowRequest(编号)。appUplink.HandleUplink在分发前对 ack、receipt_ack 以外的所有帧调用它,超限回rate_limited。Submit里的检查,避免 send 被计两次。internal/app/message/rate.go、submit.go;cmd/nixmsg/uplink.go(总控线)。rate_limited会直接返回给应用,符合 DEVELOPMENT 第 9 节。rate_limited;ack 不计入。[I-10] 每端请求限速只作用于 send
message.Submit上;unlock、self.、group.、presence.、directory. 都不限速,recall 和 status 也不限(属消息线)。presence.get(每次最多 200 次查库)、带大量成员的group.create,挤占 argon2 池和数据库。message/submit.go:24是唯一的限速检查;cmd/nixmsg/uplink.go:64-78分发前不检查;DEVIATIONS M1 第 2 条写明备选方案是「在上行统一限流」。AllowRequest(ep),用同一个桶;appUplink.HandleUplink在分发前对 Ack 和 ReceiptAck 以外的帧检查,超出返回rate_limited;同时去掉 Submit 里的检查,避免 send 被计两次。cmd/nixmsg/uplink.go、message/rate.go、message/submit.go。rate_limited;ack 不计数。[P-11] 上行限流只覆盖 send,其余请求都不限速
message.App.Submit上。appUplink.dispatch分发的 directory.list、status、group.get(每次最多 200 行)、presence.*、self.update、recall、unlock 等请求都不经过任何限流。uplink.go:64-224;message/submit.go:25。appUplink.HandleUplink解码之后、分发之前统一扣桶,ack 和 receipt_ack 除外,超限回rate_limited。为了保持"共用一个桶"又不重复扣 send,二选一:AllowRequest(endpointID)),uplink 对非 send 请求调它,send 仍由 Submit 自己扣;cmd/nixmsg/uplink.go;需要 M 线配合改internal/app/message/rate.go、submit.go复审基线:main
4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。已合入 origin/main
0c9b459。落地提交aa24e97fix: 上行分发前统一限速,send 不再单独扣桶 (#36)。