繁体   English   中英

沙盒化PHP Phar文件

[英]Sandboxing PHP Phar files

我正在制作一个具有运行插件功能的应用程序,现在我希望将这些插件沙盒化,使其只能在自己的环境中运行(无法从安装中访问文件),而不能访问配置设置(例如作为由“定义”变量定义的数据库密码)

我应该使用什么沙盒我的Phar插件?

有3种基本方法可以向应用程序添加沙箱功能。

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

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

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

第三个选项似乎是最简单但最弱的解决方案,因为您可以使用suhosin打开任何恶意插件,都可能将其关闭。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM