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

时间:2018-06-30 13:04:27

标签: php security ip unsafe

我正在编码Web应用程序,我想保护我的客户帐户,以便我获取其IP并将其存储在数据库中

足够使用

$_SERVER['REMOTE_ADDR']

OR

最好使用这些

$_SERVER['HTTP_CLIENT_IP']

$_SERVER['HTTP_X_FORWARDED_FOR']

因为我已经读到最后两个都不安全,所以 REMOTE_ADDR 是检测访问者IP的最佳方法

1 个答案:

答案 0 :(得分:0)

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

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

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

[编辑:请注意,访问您网站的客户端可以添加伪造的请求标头-例如,它们可能直接连接到您的服务器,并提供伪造的X-Forwarded-For标头。无法相信此标头是您用户的实际IP。不幸的是,无法保证您的Web应用看到的IP实际上是用户的真实IP。您和它们之间可能存在伪造的标头,NAT等。使用某种IP过滤器可以帮助提高安全性,但这并不是一个解决方案-您还需要其他解决方案。]