• 技术文章 >后端开发 >PHP问题

    PHP如何才能获取真实IP

    PHPzhongPHPzhong2022-06-15 21:13:31原创484

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

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

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

    db352c180971506c1c65440bd534489.png

    当没有出现伪造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

    推荐阅读:

    php教程

    以上就是PHP如何才能获取真实IP的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:IP php
    上一篇:php中哪个内置函数会在数组末尾添加值 下一篇:php cookie无法删除吗
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP如何获取IP所属地区的代码实例(纯代码)• uniapp获取ip的方法• php获取ip不准确怎么办• 如何利用php获取ip地址
    1/1

    PHP中文网