【问题标题】:php / ajax REMOTE_ADDR set to IP of bogus network adapterphp / ajax REMOTE_ADDR 设置为假网络适配器的 IP
【发布时间】:2010-12-12 23:17:06
【问题描述】:

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

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

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

$_SERVER['REMOTE_ADDR']

这适用于大多数客户。今天我遇到了一个安装 remote_addr 包含一个网络适配器的 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)

通过普通 LAN 卡进行通信。现在实际的客户有几个 设备更多。 VMNet 适配器等。

我想知道客户端配置如何对 Web 服务器造成如此大的“干扰”...

TIA

K

【问题讨论】:

  • 您能否在此处详细说明采用者和运行应用程序的服务器。我的意思是他们持有哪些 IP。
  • 所以示例场景在客户端可能如下所示: eth0 - 10.0.0.1 eth1 - 10.1.1.1 然后在服务器上你有 10.1.1.2 并且当请求从客户端而不是 10.1.1.1 通过时它显示 10.0.0.1 ?
  • 正确,eth1 完成了这项工作,所以我想在 remote_addr 中有 10.1.1.1。
  • 这真的很奇怪,我还没有看到这样的行为,我认为这可能与客户端网络配置有关。如果有路由,您可能需要检查网关配置等,可​​能关闭所有连接并一一恢复,看看问题开始发生在哪里,然后检查特定的网络采用者配置.. 只是我的 2 美分.如果两者都在不同的子网上,那么这根本不应该发生,至少我想不出它发生的合理原因。

标签: php ajax


【解决方案1】:

不幸的是,您必须对所有 IP 信息持保留态度。

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

【讨论】:

  • 感谢这个,但您有什么最佳做法可以推荐吗?
  • 您问题中的代码是我认为的“最佳选择”。在大多数情况下,它将捕获正确的 IP。请理解,我不一定相信结果。
  • I C 并被接受,但您能否推荐阅读有关 REMOTE_ADDR 等实际如何由 apache 设置的内容?我非常想了解是什么给我带来了麻烦。 TIA
猜你喜欢
  • 2012-09-23
  • 2013-05-20
  • 2011-06-25
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多