生产若按 DEVELOPMENT 4.5 配置 trusted_proxies 并经反向代理开放注册:MQTT WebSocket 登录锁定和管理 API 锁定能拿到 X-Forwarded-For 真实 IP,但 POST /api/client/register 仍用 RemoteAddr(通常是代理地址)。结果是:所有用户共享一个注册锁定桶(误伤),或无法按客户端 IP 限制猜安全码(F23 失效)。
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
严重级
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未设置ClientIPinternal/app/identity/register.go第 63–81、102 行:默认clientIPFromRemoteAddrinternal/admin使用httpx.ClientIP;internal/broker/ws.go第 33–37 行使用proxies.ClientIP文档条款
为何不是故意设计
I1.4 是 I1 隔离交付时的接线欠账,不是产品决定。L-WIRE 已把注册 Handler 挂到 serve,管理接口和 WS 都接了 trusted_proxies,唯独注册漏接。D14 明文存安全码是已确认的产品选择,与本条无关。
建议方向(不实现)
identity.New注入与 admin 相同的httpx.ClientIP(r, trustedNets)(或listener.Proxies().ClientIP)。不要在 identity 包再复制一套不一致的解析。已合入并推送 main
4059a1576bc97879b840ec5200defd80bc9eb3f0。自助注册按
trusted_proxies使用httpx.ClientIP解析客户端 IP,与管理接口同一套解析。