【发布时间】:2013-09-27 21:38:51
【问题描述】:
在 node.js + socket.io 中,我使用此代码获取用户的 IP 地址:
var clientIP = socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address;
但结果是错误的。我console.log'd 这些值并得到以下结果:
socket.handshake.address.address显然是内部IP (127.x.x.x)
x-forwarded-for 是 cloud9 的代理之一(107.23.232.64、54.236.78.114、107.23.123.140)。
显然使用了双重代理,并且其中一个代理层没有提供'x-forwarded-for' 标头,对吗?使用cloud9绝对不可能获得用户的真实IP吗?这对我的项目至关重要。
【问题讨论】:
-
如果用户以某种方式被代理,您将无法 100% 准确地获取用户的远程 IP。您可以从各种 http 标头中获得的每个 IP 都可以轻松伪造/更改。只有 $_SERVER['REMOTE_ADDR'] 甚至是远程可信的,即使这只是用户的数据包在到达您的站点之前来自的最后一台机器。
标签: node.js proxy http-headers socket.io cloud9-ide