PHP脚本可以包含在我的文件系统之外吗?


Can a PHP script be included outside my file system?

我有一个名为constants.php的PHP脚本,里面有很多有价值的数据,比如我的MySQL信息等。

是否可以在我的机器外部访问该脚本?比方说,使用以下方法:include http://www.fakewebsite.com/config/constants.php

嗯,是也不是。

:他们将能够访问文件constants.php的输出(但很可能它是空白的)。

:他们无法访问您的变量。您只能在解析 PHP 之前访问它们。

让我们阅读文档:

如果在 PHP 中启用了"URL fopen 包装器"(它们位于 默认配置),您可以使用以下命令指定要包含的文件 URL(通过 HTTP 或其他受支持的包装器 - 请参阅支持的协议 和协议列表的包装器)而不是本地路径名。如果 目标服务器将目标文件解释为 PHP 代码、变量 可以使用使用的 URL 请求字符串传递到包含的文件 使用 HTTP GET。严格来说,这与 包含文件并让它继承父文件的变量 范围;该脚本实际上正在远程服务器上运行,并且 然后将结果包含在本地脚本中。

因此,您实际上可以加载外部文件(如果您的管理员允许您这样做)。但是,它对您有用吗?在网络浏览器中打开http://www.fakewebsite.com/config/constants.php,然后打开"查看源代码"菜单。无论你在那里看到什么,它都是你的PHP脚本将看到的(很可能是一个空白页)。

最后但同样重要的。。。假设远程服务器配置为执行*.php文件或包含生成PHP代码的PHP脚本,为什么要将所有有价值和敏感的数据发布到Internet上?

如果 URL

可以公开访问,那么是的,任何人都可以从 URL 读取它,包括脚本。

然而,这里的关键部分是他们将访问constants.php输出,而不是文件本身。它们将获得与从 Web 浏览器访问文件时完全相同的输出。

他们不能做的是通过调用URL来包含您的实际PHP代码。该 URL 不是与 PHP 文件的直接连接;它是与 Web 服务器的连接。然后,Web 服务器处理 PHP 文件并提供输出。只要 Web 服务器在发送输出之前处理 PHP 文件,那么您的 PHP 代码就是安全的。无法通过 URL 看到它。

可能还有其他方法可以做到这一点,但不是那样。

是的,只要您有权访问该脚本,就可以将其包含在您自己的脚本中。