如何在PHP中获取客户端IP地址

21 浏览
0 Comments

如何在PHP中获取客户端IP地址

如何使用PHP获取客户端IP地址?

我想通过IP地址记录登录到我的网站的用户。

admin 更改状态以发布 2023年5月21日
0
0 Comments

$_SERVER['REMOTE_ADDR'] 可能不会实际包含真实的客户端IP地址,因为对于通过代理连接的客户端,它会给你一个代理地址。但这可能是你真正想要的,具体取决于你处理IP的方式。如果你想查看流量来源或者记住用户上次连接的IP地址,那么某个人的私有RFC1918地址可能对你无济于事,而代理或NAT网关的公共IP可能更适合进行存储。

有几个HTTP头像X-Forwarded-For,但这些头可能会被各种代理设置或不设置。问题在于这些只是任何人都可以设置的HTTP头,它们的内容没有保证。 $_SERVER['REMOTE_ADDR'] 是Web服务器接收连接并将响应发送到的实际物理IP地址。其他任何东西都只是任意的和自愿的信息。只有一个场景可以信任这个信息:你正在控制设置此头的代理。这意味着只有当你100% 确定了头在哪里和如何设置时,你才应该对其进行重视。

话虽如此,下面是一些示例代码:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

编辑的注意事项: 使用上述代码具有安全隐患。客户端可以将所有的HTTP头信息(即 $_SERVER['HTTP_...)设置为任意值。因此,更可靠的方法是使用 $_SERVER['REMOTE_ADDR'],因为这不能被用户设置。

来源:http://roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html

0
0 Comments

不管你做什么,一定不要相信从客户端发送来的数据。$_SERVER['REMOTE_ADDR']包含了连接方的真实IP地址,这是你能找到的最可靠的值。

然而,他们可能在代理服务器后面,代理服务器可能设置了$_SERVER['HTTP_X_FORWARDED_FOR'],但这个值很容易被欺骗。例如,它可以被没有代理的人设置,或者IP可以是代理后面LAN内部的IP。

这意味着,如果你要保存$_SERVER['HTTP_X_FORWARDED_FOR'],请确保你也保存了$_SERVER['REMOTE_ADDR']值。例如,通过在数据库中保存两个不同的字段中的两个值。

如果你要将IP保存到数据库中作为字符串,请确保至少有45个字符的空间IPv6 已经到来,这些地址比较老的IPv4地址更大。

(请注意,IPv6通常最多使用39个字符,但也有一个特殊的IPv4地址的IPv6表示法,它的完整形式可以达到45个字符。因此,如果您知道自己在干什么,可以使用39个字符,但如果你只是想设置并忘记它,使用45个字符吧。)

0