4

有很多方法可以检测您是在本地主机还是服务器上运行 PHP 代码。但是,他们使用 $_SERVER 和 http 标头,这些标头可能被用户伪造。

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

4

3 回答 3

2

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

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

你可以做什么:

  • 不要从 PHP 内部检查 IP,而是使用更严格的方法确保无法从外部访问该页面,例如通过设置硬件或软件防火墙来阻止来自外部的任何访问,或者将您的 Web 服务器配置为仅侦听本地请求。

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

  • 与安全专家交谈(可能在http://security.stackexchange.com上),解释您的网络设置,并就您的特定场景中是否可能出现 IP 欺骗征求意见。

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

或者你当然可以相信没有人会发现。如果这是针对一个低风险的私人项目,那么考虑 IP 欺骗可能会过度考虑它。

于 2013-08-03T08:50:50.863 回答
1

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

使用 localhost 或 127.0.0.01 或您选择的 LAN IP 检查它。

Pekka 웃</a>的回答进一步详细说明了这可能是如何被欺骗的。

于 2013-08-03T08:34:20.413 回答
-1
$serverList = array('localhost', '127.0.0.1');

if(!in_array($_SERVER['HTTP_HOST'], $serverList)) {
}

你不能伪造这个

于 2013-08-03T08:31:40.223 回答