php / ajax REMOTE_ADDR设置为伪网络适配器的IP

时间:2009-11-04 10:15:09

标签: php ajax

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

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

为了获得客户端的IP,我使用了普通的

$_SERVER['REMOTE_ADDR']

适用于大多数客户。今天我遇到了一个装置 remote_addr包含一个网络适配器的IP,它不是执行的那个 我申请的实际沟通。

在Google上搜索我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 Version 5.2.9-1
  • Apache / 2.2.9(Win32)

通过常规LAN卡进行通信。现在,客户端有几个 设备更多。 VMNet适配器等。

我想知道客户端配置如何“打扰”Web服务器......

TIA

K

1 个答案:

答案 0 :(得分:4)

不幸的是,你必须拿出所有的知识产权信息。

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