有很多方法可以检测您是在本地主机还是服务器上运行 PHP 代码。但是,他们使用 $_SERVER 和 http 标头,这些标头可能被用户伪造。
这对我来说很严重,因为我在我的网站上做了一个开发人员 php shell 交互,如果它不在本地主机上,它应该转到 404。
最直接的答案是$_SERVER["REMOTE_ADDR"]
。它通常被认为是相当安全的。
但是,如果您通过脚本提供对命令行命令的访问,则可能还不够。可以通过IP 欺骗从外部向您的脚本发送请求。即使 IP 欺骗通常意味着攻击者不会收到响应,这可能足以触发破坏性命令。(这是一个非常深奥的场景,我对此知之甚少,但它可能是可能的。)
你可以做什么:
不要从 PHP 内部检查 IP,而是使用更严格的方法确保无法从外部访问该页面,例如通过设置硬件或软件防火墙来阻止来自外部的任何访问,或者将您的 Web 服务器配置为仅侦听本地请求。
不是从 PHP 中检查 IP,而是使用某种密码身份验证来保护页面。
与安全专家交谈(可能在http://security.stackexchange.com上),解释您的网络设置,并就您的特定场景中是否可能出现 IP 欺骗征求意见。
通过CLI(服务器的本地命令行)而不是 Web 服务器使您的脚本可用。将您的脚本放在 Web 服务器的根目录之外。(不过,此选项可能会破坏您拥有交互式 shell 的特定目的)
或者你当然可以相信没有人会发现。如果这是针对一个低风险的私人项目,那么考虑 IP 欺骗可能会过度考虑它。
相信你正在寻找$_SERVER['REMOTE_ADDR']
。
使用 localhost 或 127.0.0.01 或您选择的 LAN IP 检查它。
Pekka 웃</a>的回答进一步详细说明了这可能是如何被欺骗的。
$serverList = array('localhost', '127.0.0.1');
if(!in_array($_SERVER['HTTP_HOST'], $serverList)) {
}
你不能伪造这个