我正在尝试建立一个环境,允许我在PHP中有一个全局脚本,可以调用位于子目录中的其他脚本,这些脚本就像插件一样。但是,我正在尝试确保子目录中的脚本只能访问其自己子目录的内容,以确保我可以强制实施访问控制。
说明: 文件A可以调用任何其他文件并检查其内容 文件B只能访问位于目录X中的脚本和文件 文件B无法访问文件A或位于除X之外的任何其他目录中的文件(例如Y) 文件C只能访问位于目录Y中的脚本和文件 文件C无法访问文件A或位于除Y之外的任何其他目录中的文件(例如X)
此外,我想确保X中的任何子目录都可以通过X中的脚本访问。
在PHP + Apache环境中是否有任何方法可以自动,安全和可扩展的方式强制执行此类行为?
答案 0 :(得分:1)
PHP有一个名为open_basedir
的配置指令,它“将PHP可以访问的文件限制在指定的目录树中,包括文件本身。” (PHP Docs)open_basedir
为PHP_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脚本。
当然还有其他一些虚拟化和沙盒软件。但我认为这两种解决方案最接近你的目标。