我有一个名为 的 PHP 脚本constants.php
,里面有很多有价值的数据,比如我的 MySQL 信息等。
是否可以在我的机器之外访问该脚本?可以说,使用以下内容:include http://www.fakewebsite.com/config/constants.php
嗯,是的,也不是。
是:他们将能够访问文件的输出constants.php
(但很可能它是空白的)。
否:他们将无法访问您的变量。您只能在 PHP 被解析之前访问它们。
让我们阅读文档:
如果在 PHP 中启用了“URL fopen 包装器”(它们在默认配置中),您可以使用 URL 指定要包含的文件(通过 HTTP 或其他支持的包装器 - 请参阅支持的协议和包装器以获取协议列表)而不是本地路径名。如果目标服务器将目标文件解释为 PHP 代码,则可以使用与 HTTP GET 一起使用的 URL 请求字符串将变量传递给包含的文件。严格来说,这与包含文件并使其继承父文件的变量范围不同。该脚本实际上正在远程服务器上运行,然后将结果包含到本地脚本中。
因此,您实际上可以加载外部文件(如果您的管理员允许)。但是,它对您的情况有用吗?在您的网络浏览器中打开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 看到。
可能还有其他方法可以解决它,但不是那样。
是的,只要您有权访问该脚本,您就可以将其包含在您自己的脚本中。