文档:同步客户端 IP 只信 X-Real-IP
- ADR:身份与去重键节写明 IP 取 nginx 覆盖的 X-Real-IP、XFF 只取末段,并追加 2026-10-04 修订记录 - 玩法链路:去重与限流节标注 IP 来源 - decision-log:2026-10-04 条目补安全修正说明与标题
This commit is contained in:
@@ -80,7 +80,9 @@
|
||||
### 8. 身份与去重键
|
||||
|
||||
登录用 `userId`;匿名用前端 `localStorage` 持久随机 `clientId`(随请求体带上);两者都缺失时回退
|
||||
`IP + UA`。30 分钟窗口按 `identity + gameId`。不新造匿名 cookie、不依赖登录后才有的设备指纹。
|
||||
`IP + UA`。30 分钟窗口按 `identity + gameId`。不新造匿名 cookie、不依赖登录后才有的设备指纹。`IP`
|
||||
取 nginx 覆盖写入的 `X-Real-IP`(无 CDN 时即真实 TCP 对端),不取可伪造的 `X-Forwarded-For` 首段;
|
||||
限流键与微信支付下单的 `payer_client_ip` 同源(2026-10-04 补充)。
|
||||
|
||||
### 9. 落位 = 纯持久化 / 读模型
|
||||
|
||||
@@ -136,3 +138,6 @@ procedure 在 `spacetime-module`,facade + mapper 在 `spacetime-client`,缓
|
||||
- 2026-10-04:关停不再强制 flush(原「正常 SIGTERM/滚动重启必须在 `finalize_shutdown` 内 force flush」
|
||||
作废)。理由:关停时最后一个窗口丢失概率极低,而强制 flush 需要把 worker 生命周期接进关停顺序并为在途
|
||||
网络写入等待;按"perf 与简单优先"取舍,直接放弃该窗口。同日明确 flush 任一分片失败即丢弃剩余分片。
|
||||
- 2026-10-04:客户端 IP 解析改为优先 nginx 覆盖写入的 `X-Real-IP`,`X-Forwarded-For` 只作回退且取最后
|
||||
一段(nginx 用 `$proxy_add_x_forwarded_for` 追加的真实对端),不再信任可伪造的首段——公开上报端点原来
|
||||
用它做匿名身份与限流键,可被伪造 IP 绕过并灌水。无 CDN 前置时 `X-Real-IP` 即真实客户端。
|
||||
|
||||
Reference in New Issue
Block a user