代码之家  ›  专栏  ›  技术社区  ›  KB22

php/ajax远程地址设置为假网络适配器的IP

  •  5
  • KB22  · 技术社区  · 15 年前

    今天我遇到了我的一个基于PHP的应用程序的一个非常奇怪的行为。 在系统的某一部分中,有一个UI使用Ajax调用来填充列表。 包含后端内容的框。

    现在,Ajax侦听器对所有传入的请求执行安全检查,确保 只有有效的客户端IP才能得到响应。有效的IP也存储在后端。

    为了得到客户的IP,我使用了纯旧的

    $_SERVER['REMOTE_ADDR']
    

    这对大多数客户都适用。今天我碰到一个装置 远程地址包含网络适配器的IP,而不是执行该网络适配器的IP 我的应用程序的实际通信。

    咕噜咕噜地找我 Roshan's Blog entry on the topuic :

    function getRealIpAddr()
    {
        if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
        {
          $ip=$_SERVER['HTTP_CLIENT_IP'];
        }
        elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy
        {
          $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        else
        {
          $ip=$_SERVER['REMOTE_ADDR'];
        }
        return $ip;
    }
    

    遗憾的是,问题依然存在。

    有没有人曾经遇到过这样的问题(实际上我不认为我发现了一个完全新的问题^^),并有一个想法如何解决这个问题?

    编辑:

    我在

    • PHP版本5.2.9-1
    • Apache/2.2.9(Win32)

    通信是通过一个普通的局域网卡完成的。现在,actuall客户机有几个 设备更多。vmnet适配器等。

    我想知道一个客户机配置如何“干扰”一个Web服务器那么多…

    蒂亚

    K

    1 回复  |  直到 15 年前
        1
  •  4
  •   Kevin Peno    15 年前

    不幸的是,您必须用一粒盐来获取所有IP信息。

    IP地址是在请求期间通过考虑数据包和请求信息而收集的。不幸的是,这些信息很容易被欺骗,甚至是不正确的(基于大量的网络概率),不应该用于虚荣以外的任何目的。