$ _SERVER ['REMOTE_ADDR']的可能返回值是什么?

时间:2009-10-06 17:53:23

标签: php ipv6 ipv4

在编写登录模块时,我想记录IP作为另一个措施,用于验证另一方的人是否仍然是另一方的同一个人。

我使用$_SERVER['REMOTE_ADDR']作为获取远程机器IP地址的一种(多种)方法。除了IPv4或IPv6地址之外,还有其他任何我应该期望返回的值吗?

3 个答案:

答案 0 :(得分:3)

根据PHP在线文档,只应返回一个IP地址。

http://us.php.net/manual/en/reserved.variables.server.php

“ 'REMOTE_ADDR':

用户正在查看当前页面的IP地址。“

答案 1 :(得分:0)

该值可以是IPv4或IPv6地址。虽然您可能只会获得规范值,但请注意IP地址可以通过多种方式编写。 192.0.2.1192.000.002.001相同,2001:db8::12001:0db0:0000:0000:0000:0000:0000:0001相同,等等.IP地址甚至可以用::ffff:192.0.2.1或{{ 1}}如果Web服务器接受IPv6套接字上的IPv4连接。我在Linux系统上看到了很多。

只要您预留足够的空间,记录IP地址应该不是问题。实际上,使用IP地址进行访问控制现在变得越来越棘手。由于世界上大部分地区已经耗尽了新的IPv4地址,因此您将看到ISP必须大规模使用NAT才能将新客户连接到IPv4互联网。这些大规模NAT将为数千个客户使用公共IPv4地址池。许多客户可以使用一个IP地址,一个客户可能最终使用池中的不同地址。

在IPv6跟踪中,IP地址还有其他需要考虑的因素。原始IPv6自动配置机制基于使用MAC地址作为IPv6地址的一部分。由于隐私问题,大多数操作系统现在使用(种类)随机生成的接口标识符(通常是地址的最后64位)用于传出连接,并且这些位可以/将随时间变化。有些操作系统(Mac OS X)甚至可以统计IPv4或IPv6是否更快,我看到客户端有时会在IPv4和IPv6之间来回切换。

然后,您可以让用户从一个无线热点或办公室网络漫游到另一个,从而切换IP地址。

因此,我认为根据您想要对数据执行的操作来记录IP地址可能有意义,但将它们用作(一部分)访问控制的形式可能会导致更多麻烦而不是它的价值。

答案 2 :(得分:-2)

检查IP地址确实没有额外的安全性,因为这些很容易被欺骗,任何精通足以拦截POST交易的人都可能会这样做。

此外,您可能会使合法用户感到烦恼。想想一个人可能在一个有几个免费开放的wifi热点的位置的实例。当他们到达您的登录页面时,他们可能连接到一个热点,但是当他们登录时,他们的机器可能已经决定另一个路由器是更好的选择,因此他们的IP将改变。信不信由你,这可能会阻止一些(尽管非常很少)容易沮丧的用户。

老实说,我只是不会打扰。如果可以,使用SSL通常是避免安全问题的最佳方式,例如您所描述的安全问题。祝你的项目好运。