使用 $_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 过滤器有助于提高安全性,但它本身并不是解决方案 - 您还需要其他东西。]
我正在编写 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 过滤器有助于提高安全性,但它本身并不是解决方案 - 您还需要其他东西。]