PHP中如何准确获取访问者的原始IP地址?
- 内容介绍
- 文章标签
- 相关推荐
本文共计655个文字,预计阅读时间需要3分钟。
在PHP中,获取请求IP的常见方式通常涉及三个全局变量,但并不完全可靠。以下是三种方法:
1. 使用`$_SERVER['REMOTE_ADDR']`获取客户端与服务器直接握手IP。
2.使用`$_SERVER['HTTP_X_FORWARDED_FOR']`获取经过代理的IP。
3.使用`$_SERVER['HTTP_CLIENT_IP']`获取客户端IP,但可能不准确。
在PHP中,常见获取请求IP的方式一般是通过3个超全局变量,不过很显然三种获取IP的方式并不完全可靠。
$_SERVER['REMOTE_ADDR']; // 客户端与服务器握手IP,如果使用代理则会获取到代理IP $_SERVER['HTTP_CLIENT_IP']; // 代理服务器发送的HTTP头(可伪造) $_SERVER['HTTP_X_FORWARDED_FOR']; // 用户是在哪个IP使用的代理(可伪造)
如果域名没有经过代理,一般稳妥的方式是 REMOTE_ADDR,如果是海外网络最稳妥的方式是云厂商提供可靠的源IP获取方式,如谷歌云提供的:
当没有出现伪造IP时,X-forwarded-For 一般是客户端真实IP,负载均衡 IP
当出现伪造IP时,谷歌云将伪造的内容进行前置,格式是 <伪造内容>,客户端真实IP,负载均衡 IP
所以无论是否伪造,我们都可以通过逗号切割字符串,找到倒数第二个X-forwarded-for的值,就可以获取到真实客户端IP。
当然,如果域名云厂商没有提供类似的域名信息,我们就无法简单通过超全局变量进行获取了。
本文共计655个文字,预计阅读时间需要3分钟。
在PHP中,获取请求IP的常见方式通常涉及三个全局变量,但并不完全可靠。以下是三种方法:
1. 使用`$_SERVER['REMOTE_ADDR']`获取客户端与服务器直接握手IP。
2.使用`$_SERVER['HTTP_X_FORWARDED_FOR']`获取经过代理的IP。
3.使用`$_SERVER['HTTP_CLIENT_IP']`获取客户端IP,但可能不准确。
在PHP中,常见获取请求IP的方式一般是通过3个超全局变量,不过很显然三种获取IP的方式并不完全可靠。
$_SERVER['REMOTE_ADDR']; // 客户端与服务器握手IP,如果使用代理则会获取到代理IP $_SERVER['HTTP_CLIENT_IP']; // 代理服务器发送的HTTP头(可伪造) $_SERVER['HTTP_X_FORWARDED_FOR']; // 用户是在哪个IP使用的代理(可伪造)
如果域名没有经过代理,一般稳妥的方式是 REMOTE_ADDR,如果是海外网络最稳妥的方式是云厂商提供可靠的源IP获取方式,如谷歌云提供的:
当没有出现伪造IP时,X-forwarded-For 一般是客户端真实IP,负载均衡 IP
当出现伪造IP时,谷歌云将伪造的内容进行前置,格式是 <伪造内容>,客户端真实IP,负载均衡 IP
所以无论是否伪造,我们都可以通过逗号切割字符串,找到倒数第二个X-forwarded-for的值,就可以获取到真实客户端IP。
当然,如果域名云厂商没有提供类似的域名信息,我们就无法简单通过超全局变量进行获取了。

