首页  >  问答  >  正文

PHP 上的客户端 IPv6 但节点服务器上的 IPv4 - 需要它们相同

<p>我遇到了与安全和验证相关的问题。我有一个软件可以检查以确认用户,并且我需要确保发送 PHP 请求和节点服务器请求的是同一客户端。但是,在节点服务器上,客户端的 IP 以 IPv4 显示,而在 PHP 上以 IPv6 显示。有什么方法可以在某处获得相同的输出,例如在节点服务器上提取 IPv6 或在 PHP 服务器上提取 IPv4?谢谢。</p> <p>获取相同的 IP 或验证它是否是同一客户端,尽管 IPv4 和 IPv6“不同”</p>
P粉239164234P粉239164234382 天前532

全部回复(1)我来回复

  • P粉860370921

    P粉8603709212023-09-05 15:18:18

    问题在于 IPv6 和 IPv4 没有以任何方式耦合。无法从 v4 地址推断出 v6 地址,反之亦然。

    以我的拙见,您应该避免通过 IP 地址验证用户,因为 IP 地址是 欺骗,这种做法会导致此类问题。也就是说,有几个“解决方案”。

    • 在托管 PHP 应用程序的网络服务器上禁用 IPv6。由于您没有提到这是什么类型的网络服务器,您应该能够在谷歌上搜索“禁用 ipv6 apache”之类的内容来了解​​如何实现这一点。这应该保证两台服务器上的 IPv4 地址相同。我个人不太喜欢这个解决方案,因为它阻碍了 IPv6 的采用。

    • 节点服务器上启用 IPv6。请注意,出于任何原因,客户端仍然可能更喜欢 IPv4 而不是 IPv6,并且无法保证它将对两个网络服务器使用 IPv6。

    • 您可以将所有调用从一个网络服务器代理到另一台网络服务器,并在“X-Forwarded-For”标头中传递原始 IP。这会引入一些开销,但源IP会更稳定。

    • 就我个人而言,我会避免使用 IP 地址并实现某种存储在客户端上的令牌,如果可以的话,可以通过共享数据库在两台服务器上进行验证。

    回复
    0
  • 取消回复