如何动态创建PHP沙箱

时间:2015-07-16 07:08:10

标签: php apache security sandbox

我正在尝试建立一个环境,允许我在PHP中有一个全局脚本,可以调用位于子目录中的其他脚本,这些脚本就像插件一样。但是,我正在尝试确保子目录中的脚本只能访问其自己子目录的内容,以确保我可以强制实施访问控制。

说明: Folder Structure 文件A可以调用任何其他文件并检查其内容 文件B只能访问位于目录X中的脚本和文件 文件B无法访问文件A或位于除X之外的任何其他目录中的文件(例如Y) 文件C只能访问位于目录Y中的脚本和文件 文件C无法访问文件A或位于除Y之外的任何其他目录中的文件(例如X)

此外,我想确保X中的任何子目录都可以通过X中的脚本访问。

在PHP + Apache环境中是否有任何方法可以自动,安全和可扩展的方式强制执行此类行为?

1 个答案:

答案 0 :(得分:1)

PHP有一个名为open_basedir的配置指令,它“将PHP可以访问的文件限制在指定的目录树中,包括文件本身。” (PHP Docsopen_basedirPHP_INI_ALL,因此您可以在ini_set()文件之前通过include()进行设置,也可以通过命令行指令{{}进行通信。 1}}。

如果open_basedir不够,您可能希望被调用的脚本在chroot环境中运行。请参阅http://www.cyberciti.biz/faq/unix-linux-chroot-command-examples-usage-syntax/。请注意,这需要大量摆弄用户权限,因为chroot希望从root或类似帐户的帐户运行。 PHP还提供了-d函数,但我认为它提供的灵活性远远低于通过命令行使用chroot调用的php脚本。

当然还有其他一些虚拟化和沙盒软件。但我认为这两种解决方案最接近你的目标。