PHP 中是否存在某些机制可以为给定目录中的脚本分配“较少的信任”?

PHP 中是否存在某些机制可以为给定目录中的脚本分配“较少的信任”?

我曾多次尝试(以不同的方式)询问这个问题,但从未得到明确、真正的答案,甚至似乎根本没有得到任何理解。

多年来这一直是我担心的问题:

出于实际和逻辑的原因,我不得不相信一些第三方 PHP 库。这些脚本的安装、更新和管理均通过 进行Composer,并且位于 中C:\PHP-untrusted-external,与我自己的 PHP 脚本(位于 中)完全分开C:\PHP-my-own

中的脚本C:\PHP-my-own包含并使用了中的库C:\PHP-untrusted-external

由于任何人(尤其是我)都不可能审查所有第三方代码和所有更新,因此我正在寻找某种方式来“保护”或“沙盒化”它们,即使只是部分的。

基本上,我担心有一天,更新会做出如下编辑:

unlink('C:\');

或者:

phone_home_to_hacker_server($contents_of_my_harddrive);

如果发生这种情况,脚本会顺利运行并执行这些操作。没有什么可以阻止它们这样做。

真的没有办法在php.ini配置文件中指定吗,例如:

security.sandbox_dir = "C:\PHP-untrusted-external"

或者:

security.refuse_network_connections_for_dir = "C:\PHP-untrusted-external"
security.refuse_disk_io_for_dir = "C:\PHP-untrusted-external"

... 或者某物像那样?

我不明白Docker。我试过无数次了,但对我来说毫无意义。我不想要 Docker。我不想处理容器。更正:我不能处理它。我试过,但不明白。好几次。

我只是希望 PHP 本身能够支持这一点,这对我来说似乎非常合理。您觉得这不合理吗?

“在某个时候,你必须信任其他人”这句话太过笼统/模糊,不适合在这里使用。这是在回避问题。我根本不信任别人,而且理由充分。我们(显然)只是坐在那里等待灾难发生,这似乎很愚蠢。至少如果我可以阻止第三方脚本对文件系统和网络进行任何操作,这将在某种程度上缓解这个问题。这仍然不会使脚本无法就它们返回给我的数字/数据撒谎,但至少它们不能直接“打电话回家”或删除随机文件。

答案1

PHP 确实提供了这些可能性。以下摘自 php.ini:

; Directives following the section heading [PATH=/www/mysite] only
; apply to PHP files in the /www/mysite directory.

; open_basedir, if set, limits all file operations to the defined directory
; and below.  This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.
; http://php.net/open-basedir
;open_basedir =

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names.
; http://php.net/disable-functions
;disable_functions = 

; This directive allows you to disable certain classes for security reasons.
; It receives a comma-delimited list of class names.
; http://php.net/disable-classes
;disable_classes =

但这些似乎都无法防范黑客,更不用说那些你允许在你的系统上安装程序的人了。我想知道,如果你知道这些,你这么多年来会睡得更安稳吗?苏霍辛或最近鼻塞

相关内容