Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
愚弄一个PHP文件,使其认为它在目录中是单独的_Php_Security - Fatal编程技术网

愚弄一个PHP文件,使其认为它在目录中是单独的

愚弄一个PHP文件,使其认为它在目录中是单独的,php,security,Php,Security,我正在开发一个东西,我将有两个非常不同的组件 此时的结构是 核心: 核心内部的东西 3第三方: 第三方开发的东西 现在,我想做的是防止第三方开发的php脚本执行类似的操作 scandir("../"); 或 或 有没有办法让这一切发生? 感谢您的帮助。 提前谢谢 我正在运行Apache,它是我自己的服务器,所以我可以设置任何扩展等。 该解决方案必须适用于生产环境,并且我需要能够允许第三方脚本,知道它们可能是恶意的。这在很大程度上取决于您设置的服务器端配置类型。以apache为例,您的apach

我正在开发一个东西,我将有两个非常不同的组件

此时的结构是
核心:
核心内部的东西
3第三方:
第三方开发的东西

现在,我想做的是防止第三方开发的php脚本执行类似的操作

scandir("../");

有没有办法让这一切发生? 感谢您的帮助。 提前谢谢

我正在运行Apache,它是我自己的服务器,所以我可以设置任何扩展等。
该解决方案必须适用于生产环境,并且我需要能够允许第三方脚本,知道它们可能是恶意的。

这在很大程度上取决于您设置的服务器端配置类型。以apache为例,您的apache线程都将作为在httpd.conf文件中的用户指令(通常类似于_www、www data或apache)中定义的系统用户运行。如果您的项目在任何时候都包含来自供应商的文件,那么这些文件将以与核心文件相同的用户(因此具有相同的权限级别)执行,从而使它们能够读取所有内容

我相信实现您的建议的唯一方法是对核心库和供应商库进行完整的划分,手动更改当前用户,然后作为单独的执行来执行供应商库。供应商需要支持这种交互。但是,它可能会变得非常糟糕,在生产环境中不建议这样做(如果供应商库是恶意的,则可能会对其进行操纵):


听起来第三方目录的设置很有效。这不会阻止第三方脚本“了解”其他3P脚本,但会阻止访问核心或任何外部系统文件

系统级访问控制可能是您的最佳选择的复制品。例如,您可以首先包含一个php脚本来设置chroot-jail,但这会变得很棘手。您的sysyem规范是什么?您是否有权限添加其他php扩展或更改其他系统configurations@Lawrence-快速浏览一下“PHP中的隔离”会让我相信更多的是XSS相关的问题,而这是第三方PHP的问题。最后的答案可能是一样的,但我认为实际的问题明显不同。关于我的特权是什么。它将托管在我的服务器上。我可以做任何我想做的:)更像一般的想法:PHP流。目录级别的函数限制(在php.ini中禁用函数/_类)或3party文件夹的环境设置(例如runkit:)。打开\u basedir php.ini设置。这在一定程度上取决于您希望php代码如何运行。使用suPHP()似乎是达到相同效果的另一种方法(摘自上面Lawrence的评论),如果它是愚蠢的,并且对生产不可行,那么对我来说就不可行。但是谢谢。所有3P脚本都在自己的目录中,我想通过这个解决方案,我可以确保3P软件包只“知道”自己软件包中的脚本。你可以将每个3P脚本限制在自己的目录中。当然。然后我想这和“SUPPP”是我的答案。谢谢:)
require "../core/anyfile.php";
file_get_contents("../core/SourceCode.php");
<?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');