【问题标题】:Get user's real IP address in Cloud9 IDE在 Cloud9 IDE 中获取用户的真实 IP 地址
【发布时间】: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


【解决方案1】:

Cloud9 确实使用两层代理来访问在工作区中运行的应用程序。第一个代理检查访问权限,第二个代理将请求通过隧道传送到工作区。第二个代理由我们的基础设施提供商 OpenShift 托管,它覆盖了第一个代理设置的 x-forwarded-for 标头。不幸的是,我们目前无法解决此问题。正如评论中提到的,尽量避免依赖遥控器的 IP。

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2021-07-05
    • 2011-09-02
    • 2019-02-01
    • 2014-05-17
    • 1970-01-01
    相关资源
    最近更新 更多