簡體   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