php从服务器检测本地主机的安全方式


php secure way to detect localhost from server

有很多方法可以检测您是否在本地主机或服务器上运行PHP代码。然而,它们使用$_SERVER和http头,这可能会被用户伪造。

这对我来说很严重,因为我在我的网站上制作了一个开发人员phpshell交互式,如果它不在本地主机上,它应该转到404。

最直接的答案是$_SERVER["REMOTE_ADDR"]。它通常被认为是相当安全的。

但是,如果通过脚本提供对命令行命令的访问权限,则可能还不够。可以通过IP欺骗从外部向脚本发送请求。可能足以触发破坏性命令,即使IP欺骗通常意味着攻击者不会收到响应。(这是一个非常深奥的场景,我对它的了解很少,只知道它可能是可能的。)

你能做什么:

  • 与其从PHP内部检查IP,不如使用更强硬的手段确保页面不能从外部访问,例如设置硬件或软件防火墙,防止任何外部访问,或者将web服务器配置为只侦听本地请求。

  • 与其从PHP中检查IP,不如使用某种密码身份验证来保护页面。

  • 与安全专家交谈(可能在http://security.stackexchange.com),解释您的网络设置,并询问在您的特定场景中是否存在IP欺骗的可能性。

  • 通过CLI(服务器的本地命令行)而不是web服务器使脚本可用。将脚本放置在web服务器的根目录之外。(不过,这个选项可能会破坏你拥有交互式外壳的特定目的)

或者你当然可以相信,没有人会发现。如果这是一个低风险的私人项目,那么考虑IP欺骗可能是想得太多了。

我相信您正在寻找$_SERVER['REMOTE_ADDR']

请使用localhost或127.0.0.1或您选择的LAN IP进行检查。

佩卡웃他的回答进一步详细说明了这可能是如何被欺骗的。

$serverList = array('localhost', '127.0.0.1');
if(!in_array($_SERVER['HTTP_HOST'], $serverList)) {
}

你不能伪造这个