Python 沙箱爭論:Pyodide 在 Deno 中是最佳方案嗎?

BigGo Editorial Team
Python 沙箱爭論:Pyodide 在 Deno 中是最佳方案嗎?

Pydantic 的模型上下文協議(Model Context Protocol,MCP)釋出用於在沙箱中執行 Python 程式碼,這引發了開發者之間關於 Python 沙箱最佳方法的熱烈討論。這個在 Deno 中執行 Pyodide 來隔離執行 Python 程式碼的解決方案,在開發者社群中獲得了讚譽也受到了批評。

Python 沙箱的安全權衡

MCP Run Python 實現在 Pyodide 中執行 Python 程式碼,Pyodide 是一個在瀏覽器中執行的 Python 發行版,它在 Deno 的 JavaScript 執行時內部執行。雖然這種方法提供了與主機作業系統的隔離,但社群成員對其安全假設提出了擔憂。一些開發者指出,這種方法依賴於多層安全性—— Deno 的 WASM VM 和 Pyodide ——這兩者都可能包含漏洞或錯誤。這場爭論突顯了安全執行不受信任 Python 程式碼的根本挑戰,因為 CPython(標準 Python 實現)在設計時並沒有將沙箱作為主要功能。

「我更信任 WASM 沙箱,而不是 Docker 容器沙箱。WASM 引擎每天在全球幾乎所有瀏覽器中執行數十億次。這些安全問題會很快被發現。」

Python 沙箱方法在討論中提及

  • Deno 中的 Pyodide (MCP Run Python):使用基於 WASM 的隔離,安全性好但有效能開銷
  • Wasmtime:直接在 Python 內部執行 WASM 容器中的 Python
  • Firecracker 微型虛擬機器:更好的安全隔離但啟動時間較慢
  • Linux 核心功能:用於沙箱的 Landlock、cgroups
  • gVisor:容器沙箱技術
  • 自定義沙箱:使用帶有自定義匯入器的 eval/exec(由 Temporal 提及)
  • 基於 Seccomp 的監獄:用於具有受限系統呼叫的有限用例

效能考慮和替代方案

討論中分享的效能指標顯示,在基於 WASM 的沙箱中執行 Python 程式碼會帶來顯著的開銷。基準測試表明,在沙箱中執行一個簡單的 hello world 程式比標準 Python 執行慢約12倍,比同一程式的最佳化 C 實現慢近370倍。這種效能差距促使開發者探索替代方法,包括使用 Linux 核心功能如 Landlock 和 cgroups、firecracker 微型虛擬機器以及其他基於 WASM 的解決方案,如 wasmtime。

效能比較(Hello World程式)

實現方式 時間 相對效能
最佳化的 C ~0.0006 秒 比 WASM 沙箱快368倍
標準 Python ~0.019 秒 比 WASM 沙箱快12.3倍
WASM Python 沙箱 ~0.234 秒 基準

生態系統支援和實際應用

儘管存在效能問題,Pyodide 方法提供了令人驚訝的靈活性。社群成員注意到,複雜的依賴項如 scikit-learn 在這種環境中也能工作,使瀏覽器中的簡單機器學習體驗成為可能。這種能力使該解決方案對某些用例具有吸引力,特別是當安全性比原始效能更重要時。這種方法也反映了主要 AI 平臺使用的技術——例如,ChatGPT 使用 Pyodide 進行基於瀏覽器的程式碼執行,並在 Kubernetes 容器中使用 Jupyter 作為其程式碼直譯器功能。

AI 代理框架的更廣泛背景

MCP Run Python 實現是不斷增長的 AI 代理框架生態系統的一部分,這些框架使語言模型能夠安全地執行程式碼。一些開發者對這些框架的激增表示擔憂,將其與 JavaScript 生態系統中看到的碎片化相提並論。提到的替代方法包括 Dylibso 的 eval-py、更靈活但速度較慢的 firecracker VM,以及使用 seccomp 等工具構建的自定義沙箱解決方案。

尋找完美的 Python 沙箱解決方案仍在繼續,理想的方法很大程度上取決於特定的用例、安全要求和效能需求。隨著 AI 系統越來越需要安全地執行程式碼,這一領域可能會繼續創新和完善。

參考:MCP Run Python