PHP 中的 REMOTE_ADDR 和 IPv6

Posted

技术标签:

【中文标题】PHP 中的 REMOTE_ADDR 和 IPv6【英文标题】:REMOTE_ADDR and IPv6 in PHP 【发布时间】:2011-02-06 20:35:41 【问题描述】:

假设$_SERVER['REMOTE_ADDR'] 总是返回一个IPv4 地址 是否安全?

谢谢!

【问题讨论】:

【参考方案1】:

REMOTE_ADDR 键由 Web 服务器设置,而不是 php。如果 Web 服务器在 v6 上侦听并且用户以这种方式连接,则它将是 v6 地址

【讨论】:

+1,谢谢!我将尝试弄清楚如何将 IPv6 地址转换为数字。 php.net/manual/en/function.inet-pton.php 会将 v4 和 v6 “字符串”地址转换为其打包表示。 @Michael IPv6 有许多文本表示。 $_SERVER['REMOTE_ADDR'] 是否返回了标准表示? @Pacerier 您将在双栈系统上获得普通的压缩 IPv6 地址或 IPv4 映射的 IPv6 地址。【参考方案2】:

我在 Apache 2 的 REMOTE_ADDR 中看到一个错误的 IP 地址报告给 php。

它是“183.60..244.37”。

因此,我认为您的问题“可以安全地假设...”的答案肯定是,REMOTE_ADDR 不可信。

据我所知,它是从服务器报告给 PHP 的,在我的例子中是 Apache。为什么它很糟糕,我仍在试图弄清楚。我知道这一点。它是作为一批攻击请求的一部分出现的。有时是 183.60.244.37,有时是 183.60..244.37。

另见this。

【讨论】:

很高兴知道,可能是一些 Apache 错误吗? 一位 php 开发人员刚刚告诉我 REMOTE_ADDR 来自 cgi,因此来自服务器的 tcp 连接,而不是 http。但我仍在努力寻找服务器如何将其报告给 php,如果这是正在发生的事情。

以上是关于PHP 中的 REMOTE_ADDR 和 IPv6的主要内容,如果未能解决你的问题,请参考以下文章

Ipv4 vs ipv6客户端识别

用PHP获取计算机的IP地址

php怎样获取客户端电脑物理地址

GAE Python 需要来自 request.remote_addr 的 IPV4 响应

如何在php上获得价值127.0.0.1而不是::1

我们可以用 php cURL 欺骗 $_SERVER['REMOTE_ADDR'] / 用户 ip 吗?