首页 > 解决方案 > 本地主机的防弹测定

问题描述

我知道这似乎微不足道,也许确实如此,但我想知道确定脚本是否在本地主机上执行的最佳方法是什么。

到目前为止,当我必须执行不同的逻辑时,我使用了以下区别,具体取决于脚本是否在本地执行:

if ( $_SERVER['REMOTE_ADDR'] === '127.0.0.1' || $_SERVER['REMOTE_ADDR'] === '::1' ) {
  // localhost-only stuff here (like different routing etc)
}

当我第一次使用它时,我检查了明显的可能性,例如:

由于该声明适用于所有这些变体,因此我不再关心这一点。与此同时,我注意到这并没有真正涵盖所有情况,例如,当使用主机名本身时

因为$_SERVER['REMOTE_ADDR']将不包含环回但本地链接 ip(如 fe80:... 等)。这让我想到了一个问题,是否有一个简单/安全/快速的解决方案真正涵盖了访问 localhost 的所有可能方式,因为我确信可能会出现很多其他变体。

// 编辑:只要脚本在 localhost 上运行比在 webhost 上运行时可能采用另一个执行路径,就不需要获取客户端 ip。例如在不使用虚拟主机或类似的东西的情况下应用不同的文档根路径

// Edit2:目前,似乎没有比检查所有可能的远程地址更好的解决方案,如下所示:

    if ( $_SERVER['REMOTE_ADDR'] === '127.0.0.1' ||
         $_SERVER['REMOTE_ADDR'] === '::1' ||
         str_starts_with($_SERVER['REMOTE_ADDR'], 'fe80:') ||
         str_starts_with($_SERVER['REMOTE_ADDR'], '169.254.') ) {
      // running on localhost
    }

标签: phprouteslocalhosthost

解决方案


推荐阅读