2014-06-07 72 views
2

我正在制作一个能够运行插件的应用程序,现在我希望将这些插件安装到只能在自己的环境中运行(不能从安装中访问文件)而不是能够访问配置设置(例如由'define'变量定义的数据库密码)沙盒PHP Phar文件

我应该用什么来对我的phar插件进行沙盒?

回答

1

有三种基本的方法可以将沙箱功能添加到您的应用程序中。

  1. 使用新的PHP进程执行环境并使用操作系统的安全机制来创建沙箱。应用程序进程和沙盒进程之间的通信将使用某种网络协议(因为OS沙盒会限制IPC和/或管道通信)。示例将包括chroot环境或docker加上zeromq。

  2. 使用新的PHP进程和PHP扩展来启用安全功能,如限制包含和网络功能。例子包括suhosin,suPHP(在较小程度上)分叉和exec()。

  3. 使用您现有的应用程序进程和PHP扩展来启用然后在执行插件代码之前和之后禁用安全功能。例子包括了Suhosin

第三选择似乎是最容易的,但最弱的,解决办法,因为什么,你可以用了Suhosin恶意插件大概可以关闭开启。

您必须列出沙盒的要求,例如禁止环境变量,限制包含路径,限制网络连接和限制数据库连接,然后在解决方案的复杂性和所需功能的优先级之间进行权衡。

听起来好像您已经从应用程序的新进程中执行PHAR文件。如果您正在执行诸如“exec('php ./plugin.phar')”的操作,则仅限于更改用户,除非主应用程序以root身份运行。您可能会有某种插件管理器进程以root身份持续运行,并使用exec在执行外部phar插件时切换用户,但这不会限制FS访问。