我正在创建一个能够运行插件的应用程序,现在我希望将这些插件沙箱只能在自己的环境中运行(无法从安装中访问文件)并且无法访问配置设置(例如由'define'变量定义的数据库密码)
我应该使用什么来沙箱我的phar插件?
答案 0 :(得分:1)
向应用程序添加沙盒功能有三种基本方法。
使用新的PHP流程执行环境并使用操作系统的安全机制来创建沙箱。应用程序进程和沙盒进程之间的通信将使用某些网络协议(因为操作系统沙箱会限制IPC和/或管道通信)。示例包括chroot环境或docker plus zeromq。
使用新的PHP流程和PHP扩展来启用限制包含和网络功能等安全功能。例子包括suhosin,suPHP,(在较小程度上)forking和exec()。
使用现有的应用程序进程和PHP扩展,在执行插件代码之前和之后启用然后禁用安全功能。例子包括suhosin
第三种选择似乎是最简单但最弱的解决方案,因为任何你可以用suhosin打开的恶意插件都可能会关闭。
您必须列出沙箱的要求,例如禁止环境变量,限制包含路径,限制网络连接和限制数据库连接,然后根据解决方案的复杂性和所需功能的优先级进行权衡。
听起来您已经在应用程序的新进程中执行了PHAR文件。如果您正在执行类似“exec('php ./plugin.phar')”的操作,那么除非您的主应用程序以root用户身份运行,否则您只能更改用户。您可以使用某种插件管理器进程以root身份持续运行并使用exec在执行外部phar插件时切换用户,但这不会限制FS访问。