【问题标题】:Getting client_ip in PHP application with apache server使用 apache 服务器在 PHP 应用程序中获取 client_ip
【发布时间】:2019-02-11 20:04:37
【问题描述】:

我是 PHP 新手,我的任务是进行地理定位。

我想在我的 php 应用程序中获取 client_ip。该应用程序部署在 AWS 上,具有 2 个负载均衡器和 apache Web 服务器。

我尝试了以下方法:

    if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
        $ipAddress = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (array_key_exists('HTTP_X_FORWARDED', $_SERVER)) {
        $ipAddress = $_SERVER['HTTP_X_FORWARDED'];
    } elseif (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
        $ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif (array_key_exists('HTTP_FORWARDED_FOR', $_SERVER)) {
        $ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
    } elseif (array_key_exists('HTTP_FORWARDED', $_SERVER)) {
        $ipAddress = $_SERVER['HTTP_FORWARDED'];
    } elseif (array_key_exists('REMOTE_ADDR', $_SERVER)) {
        $ipAddress = $_SERVER['REMOTE_ADDR'];
    } else {
        $ipAddress = '';
    }

我认为它会起作用,但它没有。然后我查看了phpinfo,发现如下:

Headers 中,X-Forwarded-For 设置为 10.1.29.16,

$_SERVER['HTTP_X_FORWARDED_FOR'] 设置为 10.1.29.16 和

$_SERVER['REMOTE_ADDR'] 是 172.17.7.173。

都是内部 IP 地址。

谁能指导我,我怎样才能找到真实客户的IP地址?

PS: 它是一个 Symfony 4 应用程序。

【问题讨论】:

  • 这取决于代理/负载平衡器如何(如果有的话)将原始 IP 传递给您的服务器。

标签: php apache amazon-web-services ip-address clientip


【解决方案1】:

您以错误的顺序检查标题。首先检查 FORWARDED_FOR 类型。您需要检查实例前面的服务器(负载均衡器等)的文档,以了解要引用的标头。 HTTP_X_FORWARDED_FOR 可能是最常见的。你在盲目地检查任何东西。

您假设标题包含单个值。如果有一个服务器链,那么每个服务器都会添加它的地址。一个示例是带有 ALB 的 Cloudfront。

标头$_SERVER['REMOTE_ADDR'] 不可靠,不应被信任。实际上,除非您控制整个链(缓存、负载平衡等),否则不应信任任何标头。伪造这些值非常容易。

【讨论】:

  • 感谢约翰的回复。我从一些博客中获取了代码,所以我不完全确定应该按什么顺序放置它们。关于负载均衡器,我一定会检查的。 FORWARDED_FOR 表示您指的是 HTTP_X_FORWARDED_FOR 吗?
  • 是的,对于 AWS 服务,它是 HTTP_X_FORWARDED_FOR。但是,请检查您正在使用的服务的文档,因为您没有在问题中指定这一点。
  • 确定。我没有提到它,因为我无法访问它:D 但很快我就会了解它。感谢您的提醒。
  • @Pradeepb 另请注意,$_SERVER['REMOTE_ADDR'] 不可靠,不应被信任。实际上,除非您控制整个链(缓存、负载平衡等),否则不应信任任何标头。伪造这些值非常容易。
  • 啊好的。这是一个很好的信息。也许您可以将它添加到您的答案中,因为其他正在寻找的人可以很容易地发现它很有用。 :)
猜你喜欢
  • 2019-08-31
  • 2011-12-26
  • 1970-01-01
  • 2021-03-25
  • 2019-09-29
  • 2016-03-02
  • 1970-01-01
  • 2015-12-12
  • 2018-08-16
相关资源
最近更新 更多