【问题标题】:Handling PHP errors with $_SERVER['REMOTE_ADDR'] reliable?用 $_SERVER['REMOTE_ADDR'] 处理 PHP 错误可靠吗?
【发布时间】:2023-04-09 02:36:01
【问题描述】:

使用$_SERVER['REMOTE_ADDR'] 正确自动处理错误可靠吗?

我正在考虑使用它来自动禁用任何 PHP 错误的显示,显示一般的“糟糕,没有任何问题”。 如果用户的 IP 地址不在在白名单中。

白名单将包含本地主机 IP 和任何其他 IP 地址,例如我的家用 PC。

但如果人们能够通过将$_SERVER['REMOTE_ADDR'] 设置为他们想要的任何值来伪造$_SERVER['REMOTE_ADDR'],那么我认为这不是一个好主意。

【问题讨论】:

  • 为什么不将它设置为向所有人显示一般错误,但将特定错误记录到文件或通过电子邮件发送给您?如果您想在编写网站代码时看到错误,可以使用实时/开发常量和 IF 语句。

标签: php security reliability


【解决方案1】:

$_SERVER['REMOTE_ADDR'] 是从三向确认 TCP 握手中获取的地址。它非常坚固。要伪造它,您必须伪造实际的底层 TCP/IP 连接,这通常是一项艰巨的任务。

我更关心的是更改 IP。 127.0.0.1 可能非常安全,但是您的家庭 IP可能最终会发生变化,并且可能会被其他人分配。这可能不是一个大问题,也可能是。或者,您可能看起来与大量其他用户拥有相同的 IP,随着时间的推移,ISP 会切换到运营商级 NAT。

总而言之,使用 IP 作为识别系统是不可靠的。 IP 是数据传输机制的实现细节,没有人说过 IP 适合在互联网范围内识别用户。我至少会将它与需要设置的秘密 cookie 或需要建立的常规身份验证配对。

【讨论】:

  • 当应用程序前面有反向代理时,我发现REMOTE_ADDR 出现问题。在这种情况下,REMOTE_ADDR 是来自代理的,而不是来自客户端的预期。
  • 你基本上是在确认我的最后一段。 :)
  • 确实如此!我只是想指出一个应该考虑的现实生活场景。
猜你喜欢
  • 2011-10-06
  • 2013-05-27
  • 2012-08-26
  • 2011-08-15
  • 1970-01-01
  • 2021-03-12
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多