这在很大程度上取决于您设置的服务器端配置类型。让我们以 apache 为例,您的 Apache 线程都将作为在 httpd.conf 文件中找到的User指令(通常类似于 _www、www-data 或 apache)中定义的系统用户运行。如果您的项目在任何时候都包含来自供应商的文件,则这些文件将使用与核心文件相同的用户(因此具有相同的权限级别)执行,从而使他们可以读取所有内容。
我相信实现您所提议的唯一方法是完全划分核心库和供应商库,手动更改当前用户,然后将供应商库作为单独的执行执行。供应商需要支持这种交互。但它可能会变得非常讨厌,并且不建议在生产环境中这样做(如果它们是恶意的,可能会被供应商库操纵):
<?php
$restricted_user = 'vendor';
$user_info = posix_getpwnam($restricted_use);
// change the user before executing the external vendor scripts
posix_setuid($user_info['uid']);
posix_setgid($user_info['gid']);
// run the vendor scripts using exec, shell_exec, system, pass_thru...
system('php /path/to/vendor/script.php');
一般来说,在您的服务器上允许您不信任其执行模式的任何可执行代码是一个坏主意。