PHP如何才能获取真实IP

在PHP中,常见获取请求IP的方式一般是通过3个超全局变量,不过很显然三种获取IP的方式并不完全可靠。 $_SERVER['REMOTE_ADDR'];//客户...

PHP如何才能获取真实IP插图1

在PHP中,常见获取请求IP的方式一般是通过3个超全局变量,不过很显然三种获取IP的方式并不完全可靠。

$_SERVER['REMOTE_ADDR'];//客户端与服务器握手IP,如果使用代理则会获取到代理IP$_SERVER['HTTP_CLIENT_IP'];//代理服务器发送的HTTP头(可伪造)$_SERVER['HTTP_X_FORWARDED_FOR'];//用户是在哪个IP使用的代理(可伪造)

如果域名没有经过代理,一般稳妥的方式是 REMOTE_ADDR,如果是海外网络最稳妥的方式是云厂商提供可靠的源IP获取方式,如谷歌云提供的:

PHP如何才能获取真实IP插图3

当没有出现伪造IP时,X-forwarded-For 一般是客户端真实IP,负载均衡 IP

当出现伪造IP时,谷歌云将伪造的内容进行前置,格式是 <伪造内容>,客户端真实IP,负载均衡 IP

所以无论是否伪造,我们都可以通过逗号切割字符串,找到倒数第二个X-forwarded-for的值,就可以获取到真实客户端IP。

当然,如果域名云厂商没有提供类似的域名信息,我们就无法简单通过超全局变量进行获取了。

当域名云厂商没有提供相应的请求源IP信息时,这时我们也可以通过服务端交互双方协商一种确认机制。

类似:在HTTP请求头加入源IP信息进行判断,由于是服务端之间的通信过程,伪造方无法知道伪造的具体信息内容,因此通常情况下这样的交互是可靠的。

判断逻辑过程

服务端A: HTTP请求头加入变量 MY_REALIP_c32fsjk234 => “1.2.3.4”,这时需要注意,变量名称尽量不要太简单,并且最好双方约定一个随机密钥作为变量名称,类似 MY_REALIP_c32fsjk234

接受请求端B: 通过 $_SERVER[‘MY_REALIP_c32fsjk234’] 判断请求头是否包含 MY_REALIP_c32fsjk234 变量,如果有,获取相应的IP作为真实IP。

原文:https://blog.csdn.net/panguangyuu/article/details/122211682

产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;

日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉

本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;

部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入

如若转载,请注明出处:https://www.chanpinyuan.cn/2746.html;
(2)
上一篇 2022年6月20日 上午12:54
下一篇 2022年6月22日 上午12:43

相关推荐

发表回复

登录后才能评论
分享本页
返回顶部