newsence
來源篩選

Show HN: Sandboxing untrusted code using WebAssembly

Hacker News

A developer has built a runtime using WebAssembly (Wasm) and WASI to sandbox untrusted code, protecting host systems by controlling resources like CPU, memory, and filesystem access. The project offers SDKs for Python and TypeScript to facilitate idiomatic integration.

newsence

Show HN:使用 WebAssembly 沙盒化不受信任的程式碼

Hacker News
25 天前

AI 生成摘要

一位開發者利用 WebAssembly (Wasm) 和 WASI 建構了一個運行時,用於沙盒化不受信任的程式碼,透過控制 CPU、記憶體和檔案系統存取等資源來保護主機系統。該專案為 Python 和 TypeScript 提供了 SDK,以促進慣用語的整合。

背景

Capsule 是一款基於 WebAssembly (Wasm) 技術開發的沙盒執行環境,旨在為 Python 與 TypeScript 提供一個安全且受控的隔離空間,用以執行不可信的程式碼。開發者透過 Rust 構建核心,並利用 WASI 0.2 與組件模型(Component Model)來精確控制 CPU、記憶體及檔案系統權限,特別針對 AI Agent 執行動態程式碼或 LeetCode 類型的程式競賽平台提供資源限制與安全保障。

社群觀點

在 Hacker News 的討論中,社群對於 Capsule 採用的技術路徑展現出濃厚興趣,但也針對其實現方式與相容性提出了不少質疑。許多討論聚焦於 Python 的 C 擴充套件(C extensions)支援問題。部分評論者指出,Python 之所以強大是因為擁有如 Pandas 等第三方套件,但這些套件通常包含 C 語言綁定,在目前的 Wasm 組件模型下難以直接運行。對此,有觀點認為與其強求 Python,不如直接讓 AI 模型撰寫 JavaScript 可能更為實際。不過,知名開發者 Simon Willison 補充道,Pyodide 已經證明在 Wasm 中運行 Pandas 是可行的,關鍵在於如何將 C 擴充套件編譯並封裝進 Wasm 檔案中。開發者則回應,目前 Capsule 遵循標準 WASI 路徑而非 Emscripten,因此在動態連結上尚不如 Pyodide 成熟,但隨著 WASI 0.3 的推進,跨語言組件的整合預計會更加完善。

關於 API 設計,Capsule 使用的裝飾器(Decorator)語法引發了正反兩面的評價。支持者認為這種設計非常符合 Python 的習慣,類似於 Modal 等現代雲端基礎設施的調用方式。然而,Simon Willison 則表達了安全上的疑慮,他認為裝飾器語法雖然簡潔,卻可能讓開發者混淆哪些程式碼是在主機運行、哪些是在沙盒內運行。他建議若能將沙盒程式碼獨立為單獨的檔案,在信任審查上會更加清晰。開發者對此表示認同,並考慮在未來版本中加入直接執行獨立檔案的功能。

此外,針對 AI Agent 的應用場景,社群成員關心如何處理動態生成的程式碼。開發者解釋,Capsule 的運作機制是在 Wasm 沙盒內運行一個解釋器(如 JavaScript 的 StarlingMonkey),這意味著每個沙盒都擁有專屬的引擎來執行 eval 操作,從而實現完全的邏輯封裝。也有討論提到,除了目前的運算與記憶體限制外,未來若能加入網路存取限制,將能更有效地防止 AI Agent 進行惡意的循環請求或大量數據下載。最後,有技術深度的評論者分析了底層實現,指出將 CPython 交叉編譯為 Wasm 組件雖然技術上令人印象深刻,但在處理複雜類型傳遞(如字串 ABI)時仍存在不便與效能挑戰,這也是 Wasm 組件模型目前亟需克服的痛點。

延伸閱讀

  • componentize-py:將 Python 程式碼編譯為 WebAssembly 組件的工具。
  • jco:用於 WebAssembly 組件的 JavaScript 工具鏈。
  • Pyodide:將 Python 科學運算堆疊(包含 NumPy、Pandas 等)帶入瀏覽器的專案。
  • StarlingMonkey:在 Wasm 中運行的 JavaScript 引擎,用於 Capsule 的動態執行。
  • Modal:一種新興的 Python 開發框架,提供類似的裝飾器語法來調用遠端運算資源。
  • just-bash:Vercel 實驗室推出的專案,提供另一種沙盒化執行環境的思考方向。