EmDash CMS 外掛執行期與安全模型
理解 EmDash 如何區分受信任與沙盒化外掛執行,以及 Dynamic Workers 對安全邊界的意義。
為何需要此模型
多數 CMS 外掛生態在同一邊界失敗:擴充擁有過多權限。
EmDash 透過區分外掛執行模式,並讓權限邊界明確化來處理這點。
兩類執行
受信任外掛
- 作為應用程式執行期的一部分載入
- 適合你擁有或完全信任的程式碼
- 營運上較單純,但安全仰賴你的審查紀律
沙盒化外掛
- 在隔離的 worker 環境中執行
- 為不受信任或半信任擴充邏輯而設計
- 受明確權限、執行期限制與網路規則約束
安全姿態較少依賴外掛意圖,較多依賴執行期隔離保證。
架構中的 Dynamic Workers
Dynamic Workers 是 Cloudflare 上沙盒執行所用的隔離原語。
沒有它,沙盒模式不可用,你應僅在受信任外掛假設下運作。
實務上:
- 免費方案:核心 CMS 可用,沙盒化外掛模式不可用
- 付費方案且具 Dynamic Workers:沙盒模型可用
權限模型:預設最小權限
外掛應只宣告所需項目:
- 讀取內容
- 寫入特定內容領域
- 呼叫對外網路端點
- 觸發選定的工作流程 hook
若未授予某權限,操作應確定性失敗。這是設計要求,而非盡力而為的禮貌。
// 範例:讓權限範圍保持明確
export default definePlugin({
id: "notify-on-publish",
capabilities: ["read:content", "email:send"]
});
重要的執行期護欄
安全與可靠都仰賴硬性上限:
- CPU 與牆鐘時間限制可防止失控處理常式
- 記憶體上限可約束濫用與意外洩漏
- 網路政策可阻擋任意外洩嘗試
這些控制把外掛失敗變成有界事件,而非整個平台停擺。
一頁式威脅模型
假設任何第三方外掛可能包含:
- 惡意行為
- 過時相依套件
- 不常見事件時序下的邏輯錯誤
因此外掛執行期應保證:
- 爆炸半徑可受隔離範圍約束
- 高權限操作預設拒絕
- 執行結果可稽核
信任應由政策贏得,而非安裝即授予。
免費方案的運作模式
若無沙盒支援:
- 盡量縮小外掛集合
- 優先使用第一方或內部審查過的外掛
- 在發佈關卡審查相依與權限
- 盡可能將高風險整合隔離到外部服務
對許多團隊這可行,但需要更強的治理紀律。
決策準則:何時必須沙盒模式
在下列情況將沙盒模式視為必要:
- 大規模安裝外部作者的外掛
- 合規需要更強的隔離證據
- 外掛遭入侵的商業風險重大
在下列情況可視為選用:
- 外掛面積小且經完整稽核
- 團隊端到端掌控發佈流程
實務治理檢查清單
在生產環境啟用任何外掛前:
- 記錄外掛負責人與用途
- 審查所需權限與對外端點
- 指定回滾負責人與回滾程序
- 在預備環境以故障注入驗證行為
外掛安全不是一次性架構決策,而是由執行期邊界支撐的營運流程。