AI Engineer Europe 2026 · 演講 · 2026-04-08 · 38 分
AI 產生的程式碼要先關進沙箱
Why, and how you need to sandbox AI-Generated Code? · Harshil Agrawal,Cloudflare
Harshil 把 LLM 寫的程式碼當成不可信的外來程式碼,用自己做的兩個 app 比較 V8 isolate 與 container 兩種沙箱,最後收成八條通用清單。
概要
- LLM 產生的程式碼是黑箱Harshil 說,把 LLM 產生的程式碼拿來執行,跟執行網路上隨便找來的程式碼片段沒有本質差別,只是包裝得比較好看。風險有三種:幻覺、過度熱心的 LLM、被汙染的 prompt。
- 程式碼繼承了應用程式的權限AI 產生的程式碼跑在你的 application 裡,檔案系統、環境變數、網路、資料庫、API key 都碰得到。Harshil 的結論是這等於把鑰匙全交出去。
- 用 capability 取代黑名單Harshil 主張只授權程式碼真正需要的能力,沒授權的東西對它來說就不存在,不必去列舉所有要擋的危險操作。
- 兩種沙箱各有適用場景isolate 快、輕、限制多,適合 tool calling 與小函式;需要檔案系統、行程或安裝套件時,就得用 container。Harshil 也說實務上兩種常會搭配用。
- 八條通用清單預設禁止網路、明確授權、一人一個沙箱、設資源上限、secret 留在沙箱外、用完銷毀、全部記錄、先驗證輸入。
原話
▶ 06:11“Your AI agent's code runs with your privileges.”
AI agent 的程式碼用的是你的權限
▶ 16:47“Global outbound null. This single line blocks all outbound network requests.”
outbound 設成 null,這一行就擋掉所有對外請求
▶ 18:43“The dangerous operations were never available.”
危險的操作從來就沒有被提供
▶ 34:05“The cost of an extra sandbox is always less than the cost of a data leak.”
多開一個沙箱的成本,永遠比資料外洩低
▶ 34:25“Keep the secrets outside of the sandbox.”
secret 留在沙箱外
延伸
- Harshil 最後給了 Dynamic Workers 文件、Sandbox SDK 文件與 Code Mode 的連結,這場沒有再展開 Code Mode 的細節。
- Cloudflare containers 預設逾時是 10 分鐘,Harshil 說可依使用情境調整。
章節
點時碼直接跳到原片的那一段。
- 開場Harshil 自我介紹後問聽眾有沒有做過讓 LLM 產生程式碼並直接執行的東西,並回顧從自動補全走到自主 agent 的過程。
- 當成不可信的程式碼Harshil 說剝掉 AI 包裝之後,就是一個黑箱吐出程式碼,你不一定逐行看,卻在自己的環境用自己的憑證執行。
- 三種風險情境幻覺(不存在的套件、沒有終止條件的遞迴)、過度熱心的 LLM 去讀環境變數、間接 prompt injection 讓 LLM 成為攻擊管道。
- 擁有你的權限AI 產生的程式碼和應用程式有同樣的存取範圍,用的是真正的 production 權限。
- 沙箱是老問題瀏覽器分頁、作業系統行程、手機 app 都早就隔離了,問題是做 AI 功能時忘了套用。接著講 capability-based security 的鑰匙比喻。
- 隔離強度光譜從同一個行程內直接跑(不要這樣做)、isolate、到 container,說明選擇看使用情境。
- 五個要守住的點secret、網路、檔案與設定、其他使用者的資料、無窮迴圈造成的資源耗盡,每一項都要有明確的是或否。
- 兩個實際 app一個要執行小型重複函式、要求極快;一個要產生動態影像並給出預覽網址,需求不同所以沙箱不同。Harshil 在第一個 app 示範 OpenClaw 替代品寫出 Hacker News skill。
- isolate 的架構用 dynamic worker 開 isolate,把 outbound 設成 null、只傳入受限的資料庫 binding;網路有封鎖、經由自家服務轉送、完全開放三種選擇。
- isolate 的限制只能跑特定語言、沒有磁碟、無狀態、有 CPU 與記憶體上限;Harshil 認為這些限制對短命函式反而是優點。
- 第二個 app 需要 container影片產生 app 要 clone、npm install、跑 dev server、對外開網址,逐項對照後 isolate 全部做不到。
- container 的架構每個使用者一個 container;worker 透過 sandbox SDK 與 durable object 管理 container 的生命週期,程式碼流程是取得沙箱、clone、安裝、起 server、開 port。
- 三個關鍵做法一人一個沙箱不共用、API key 不放進沙箱而改由 worker 代理請求、用完一定銷毀。
- container 取捨與選擇container 較慢、較貴、較複雜;決策樹只問一件事:需要檔案系統、行程或套件安裝嗎。實務上 agent 常在 isolate 與 container 間切換。
- 八條通用清單預設禁止網路、明確授權、一人一個沙箱、資源上限、secret 留在外面、用完銷毀並設最長存活時間、全部記錄、先驗證輸入。
- 結語與回顧Harshil 要大家記住 AI 產生的程式碼就是不可信的程式碼,並回顧威脅模型、capability、兩種做法與清單,最後給文件連結。
名詞
- Harshil Agrawal
- Cloudflare 的 Senior Developer Educator,平常用 AI 做東西,也教別人怎麼做
- capability-based security
- 只授予程式碼明確需要的能力,沒授權的就不存在;對照的是列舉所有要擋的東西的黑名單做法
- V8 isolate
- 輕量沙箱,沒有檔案系統也沒有行程模型,Harshil 用來跑 tool calling 與小函式
- Dynamic Workers
- Cloudflare 能在執行時動態開出 V8 isolate 的 API,Harshil 用它做 isolate 那一邊
- binding
- 主程式傳給 isolate 的受限介面,例如只開放 query 方法的資料庫,是 isolate 唯一碰得到的東西
- Sandbox SDK
- Harshil 用來管理 container 沙箱的 SDK,由 durable object 負責生命週期
- Durable Object
- 有狀態的協調者,負責驅動沙箱的生命週期
- indirect prompt injection
- LLM 讀到網頁或文件裡的隱藏指令,使用者與模型都沒做錯,但資料本身是惡意的
- OpenClaw
- Harshil 的第一個 app 是它的替代品,agent 不能執行 shell 指令,只能寫 JavaScript 在 isolate 跑
- prompt motion
- Harshil 的第二個 app,使用者用自然語言描述動態影像,AI 寫程式並給出預覽網址
- Code Mode
- Harshil 說 Cloudflare 內部使用的 AI agent 整合模式








