【问题标题】:using $_SERVER['REMOTE_ADDR'] , $_SERVER['HTTP_CLIENT_IP'] & $_SERVER['HTTP_X_FORWARDED_FOR'] [duplicate]使用 $_SERVER['REMOTE_ADDR'] , $_SERVER['HTTP_CLIENT_IP'] 和 $_SERVER['HTTP_X_FORWARDED_FOR'] [重复]
【发布时间】:2018-12-09 10:37:42
【问题描述】:

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

够用了吗

$_SERVER['REMOTE_ADDR']

最好用这些

$_SERVER['HTTP_CLIENT_IP']

$_SERVER['HTTP_X_FORWARDED_FOR']

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

【问题讨论】:

  • 还有一些。基本上,不要过度依赖它来获得“安全性”......并使用 REMOTE_ADDR 因为其他人更容易被欺骗。

标签: php security ip unsafe


【解决方案1】:

这取决于您的用户如何访问您的网络应用。 $_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

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

【讨论】:

  • 节点还指出,某些服务器配置将透明地显示HTTP_X_FORWARDED_FOR 的内容作为客户端 IP - 如果您的服务器以这种方式配置,那么它无论如何都会显示在 REMOTE_ADDR 中。
  • @Eryad 谢谢你的帮助:)
猜你喜欢
  • 2017-01-03
  • 1970-01-01
  • 2013-05-27
  • 2023-04-04
  • 2021-03-12
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
相关资源
最近更新 更多