使用 $_SERVER['REMOTE_ADDR'] , $_SERVER['HTTP_CLIENT_IP'] & $_SERVER['HTTP_X_FORWARDED_FOR']

using $_SERVER['REMOTE_ADDR'] , $_SERVER['HTTP_CLIENT_IP'] & $_SERVER['HTTP_X_FORWARDED_FOR']

我正在编写 Web 应用程序,我想保护我的客户帐户,所以我将获取他们的 IP 并将它们存储在数据库中

够用吗

$_SERVER['REMOTE_ADDR']

用这些比较好

$_SERVER['HTTP_CLIENT_IP']

$_SERVER['HTTP_X_FORWARDED_FOR']

因为我读到最后两个不安全,REMOTE_ADDR 是检测访问者 IP 的最佳方式

这取决于您的用户访问您的网络应用程序的方式。 $_SERVER['REMOTE_ADDR'] 提供连接到您的服务器的任何端点的 IP 地址。如果您的站点位于 CDN(例如 CloudFlare)之后,这将是 CDN 节点的 IP,而不是您的用户的 IP。

$_SERVER['HTTP_CLIENT_IP']$_SERVER['HTTP_X_FORWARDED_FOR']都是由你和客户端之间存在的代理服务器(比如CDN缓存)设置的。

通常,最好的选择是使用 HTTP_X_FORWARDED_FOR(如果存在),如果未设置 HTTP_X_FORWARDED_FOR,则回退到 REMOTE_ADDR

[编辑:请注意,访问您站点的客户端可以添加欺骗性请求 headers - 例如他们可能会直接连接到您的服务器,并提供伪造的 X-Forwarded-For header。此 header 不能相信是您用户的实际 IP。遗憾的是,无法保证您的网络应用看到的 IP 实际上是用户的真实 IP。你和他们之间可能存在伪造的headers、NAT等。使用某种 IP 过滤器有助于提高安全性,但它本身并不是解决方案 - 您还需要其他东西。]