为什么主机禁用 PHP 的 fpassthru()?

为什么主机禁用 PHP 的 fpassthru()?

我一直在开发一个使用fpassthru内置函数,从流或文件指针读取内容,并将其输出到输出缓冲区。它与该readfile函数非常相似,但允许我从特定偏移量开始输出。

我测试过产品的大多数托管服务提供商都运行良好,其中包括共享的多租户托管环境。但是,我发现有几个托管服务提供商将此功能fpassthru()“出于安全原因禁用”。我花了几个小时研究为什么有人会禁用该fpassthru功能,但不会禁用诸如、、以及之类的功能fopen,但fread我找不到任何有用的东西。file_get_contentsreadfile

这可能听起来很傻,但我最接近的猜测是这些主机误将fpassthru其禁用passthru,这确实值得禁用,特别是在共享环境中。话虽如此,实际passthru功能(以及exec其余的家族功能)在这些主机上也被禁用。

我尝试联系这些主持人并询问他们原因。

我无法联系 Flywheel 的销售人员,他们说他们无法回答我的问题,只有支持人员可以回答。为了联系支持人员,我必须成为客户。典型。

RunCloud 一开始看起来更有希望,我联系上了一位“3 级系统工程师”,又花了几天时间才联系上一位“高级系统工程师”,从他那里我得到了以下声明:

这是 RunCloud 上 PHP 的最佳实践,也是我们的最佳实践

我要求他们详细说明,但有一段时间没有收到回复,所以我失去了希望。

需要澄清的是,我并不是在寻找绕过 的方法。 fpassthru()我正在寻找为什么它偶尔会与exec()system()、和其他“危险”函数一起列出,而、等却可以正常工作的原因。passthru()pcntl_fork()readfile()file_get_contents()

如果您有任何见解,请分享!

答案1

不要低估货物崇拜程序员和系统管理员的力量。

提供商过去可能遇到过需要禁用特定功能的特定问题,而今天他们仍继续这样做,只是因为他们的公司“一直都是这样做的”。而现在在那里工作的人都不知道背后的实际历史事件。
更不用说这种推理是否仍然适用。

相关内容