【问题标题】:Setting $_SERVER['REMOTE_ADDR'] to fake IP address将 $_SERVER['REMOTE_ADDR'] 设置为假 IP 地址
【发布时间】:2012-09-23 21:53:07
【问题描述】:

我正在调解从客户端 A 到服务器 B 的请求。客户端 A 可能是电话或笔记本电脑。服务器 B 想知道客户端 A 的 IP 地址,但他们正在$_SERVER['REMOTE_ADDR'] 中寻找它。因为我正在访问服务器 B,所以他们获得了 $_SERVER['REMOTE_ADDR'] 的“错误”值——他们获得了我服务器的 IP 地址。我该怎么做才能让服务器 B 在其端点访问 $_SERVER['REMOTE_ADDR'] 时看到客户端的 IP 地址?

【问题讨论】:

    标签: php ip-address


    【解决方案1】:

    这发生在您的 PHP 脚本无法覆盖的层上。 X-Forwarded-For 标头用于中继真实的客户端 IP,但远程服务器必须支持这个容易被欺骗的值。

    $header = "X-Forwarded-For: {$_SERVER['REMOTE_ADDR']}, {$_SERVER['SERVER_ADDR']}";
    curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array($header));
    

    【讨论】:

    【解决方案2】:

    编辑:先前的答案是完美的。这仅适用于您自己的 dev-ip 干扰客户端统计信息的情况。

    在没有更多信息的情况下,在最基本的层面上,您应该删除自己的“开发者 IP”,这样您就不会被包含在任何统计/数据/日志中...

    您的 IP 可能与相关服务器不同:

    <?php 
    
    $dev_ip = '217.12.14.14' // your dev IP address
    
    if ($_SERVER['REMOTE_ADDR'] == $dev_ip){
        // do nothing
    } else {
        // do|show|log something
    }
    

    这不考虑动态 IP 地址分配(而不是静态 IP)。动态 IP 通常由 ISP 分配,这会导致更多问题。

    【讨论】:

    • 我认为你误解了这个问题。
    • 啊...所以我们正在谈论将 IP 传递给客户端并充当网关! (对不起,+1 评论!)
    • 支持其他答案 - 完全正确地使用 X-forwarded-for,对我来说误读最初的问题是 -1。我错过了网关元素:)
    猜你喜欢
    • 1970-01-01
    • 2015-06-19
    • 2017-04-28
    • 1970-01-01
    • 2016-05-12
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多