自助注册未接入 trusted_proxies,安全码锁定按直连/代理 IP 计 #2

Closed
opened 2026-09-30 10:28:15 +08:00 by nixevol · 1 comment
Owner

严重级

medium

分类

安全

现象

生产若按 DEVELOPMENT 4.5 配置 trusted_proxies 并经反向代理开放注册:MQTT WebSocket 登录锁定和管理 API 锁定能拿到 X-Forwarded-For 真实 IP,但 POST /api/client/register 仍用 RemoteAddr(通常是代理地址)。结果是:所有用户共享一个注册锁定桶(误伤),或无法按客户端 IP 限制猜安全码(F23 失效)。

路径

  • cmd/nixmsg/serve.go 第 140–148 行:identity.New 未设置 ClientIP
  • internal/app/identity/register.go 第 63–81、102 行:默认 clientIPFromRemoteAddr
  • 对照已接线路径:internal/admin 使用 httpx.ClientIP;internal/broker/ws.go 第 33–37 行使用 proxies.ClientIP

文档条款

  • PRD F23 / D18:注册安全码按来源 IP 锁定
  • DEVELOPMENT 4.5:来自受信任代理时用 X-Forwarded-For
  • DEVELOPMENT 6.9:注册在 listen 上,处理顺序含该 IP 是否锁定
  • DEVIATIONS I1.4:当时未改 listener,「经代理部署时接线方必须注入真实 IP」

为何不是故意设计

I1.4 是 I1 隔离交付时的接线欠账,不是产品决定。L-WIRE 已把注册 Handler 挂到 serve,管理接口和 WS 都接了 trusted_proxies,唯独注册漏接。D14 明文存安全码是已确认的产品选择,与本条无关。

建议方向(不实现)

identity.New 注入与 admin 相同的 httpx.ClientIP(r, trustedNets)(或 listener.Proxies().ClientIP)。不要在 identity 包再复制一套不一致的解析。

## 严重级 medium ## 分类 安全 ## 现象 生产若按 DEVELOPMENT 4.5 配置 `trusted_proxies` 并经反向代理开放注册:MQTT WebSocket 登录锁定和管理 API 锁定能拿到 `X-Forwarded-For` 真实 IP,但 `POST /api/client/register` 仍用 `RemoteAddr`(通常是代理地址)。结果是:所有用户共享一个注册锁定桶(误伤),或无法按客户端 IP 限制猜安全码(F23 失效)。 ## 路径 - `cmd/nixmsg/serve.go` 第 140–148 行:`identity.New` 未设置 `ClientIP` - `internal/app/identity/register.go` 第 63–81、102 行:默认 `clientIPFromRemoteAddr` - 对照已接线路径:`internal/admin` 使用 `httpx.ClientIP`;`internal/broker/ws.go` 第 33–37 行使用 `proxies.ClientIP` ## 文档条款 - PRD F23 / D18:注册安全码按来源 IP 锁定 - DEVELOPMENT 4.5:来自受信任代理时用 X-Forwarded-For - DEVELOPMENT 6.9:注册在 listen 上,处理顺序含该 IP 是否锁定 - DEVIATIONS I1.4:当时未改 listener,「经代理部署时接线方必须注入真实 IP」 ## 为何不是故意设计 I1.4 是 I1 隔离交付时的接线欠账,不是产品决定。L-WIRE 已把注册 Handler 挂到 serve,管理接口和 WS 都接了 trusted_proxies,唯独注册漏接。D14 明文存安全码是已确认的产品选择,与本条无关。 ## 建议方向(不实现) `identity.New` 注入与 admin 相同的 `httpx.ClientIP(r, trustedNets)`(或 `listener.Proxies().ClientIP`)。不要在 identity 包再复制一套不一致的解析。
Author
Owner

已合入并推送 main 4059a1576bc97879b840ec5200defd80bc9eb3f0。
自助注册按 trusted_proxies 使用 httpx.ClientIP 解析客户端 IP,与管理接口同一套解析。

已合入并推送 main `4059a1576bc97879b840ec5200defd80bc9eb3f0`。 自助注册按 `trusted_proxies` 使用 `httpx.ClientIP` 解析客户端 IP,与管理接口同一套解析。
Sign in to join this conversation.