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 與牆鐘時間限制可防止失控處理常式
  • 記憶體上限可約束濫用與意外洩漏
  • 網路政策可阻擋任意外洩嘗試

這些控制把外掛失敗變成有界事件,而非整個平台停擺。

一頁式威脅模型

假設任何第三方外掛可能包含:

  • 惡意行為
  • 過時相依套件
  • 不常見事件時序下的邏輯錯誤

因此外掛執行期應保證:

  • 爆炸半徑可受隔離範圍約束
  • 高權限操作預設拒絕
  • 執行結果可稽核

信任應由政策贏得,而非安裝即授予。

免費方案的運作模式

若無沙盒支援:

  • 盡量縮小外掛集合
  • 優先使用第一方或內部審查過的外掛
  • 在發佈關卡審查相依與權限
  • 盡可能將高風險整合隔離到外部服務

對許多團隊這可行,但需要更強的治理紀律。

決策準則:何時必須沙盒模式

在下列情況將沙盒模式視為必要:

  • 大規模安裝外部作者的外掛
  • 合規需要更強的隔離證據
  • 外掛遭入侵的商業風險重大

在下列情況可視為選用:

  • 外掛面積小且經完整稽核
  • 團隊端到端掌控發佈流程

實務治理檢查清單

在生產環境啟用任何外掛前:

  • 記錄外掛負責人與用途
  • 審查所需權限與對外端點
  • 指定回滾負責人與回滾程序
  • 在預備環境以故障注入驗證行為

外掛安全不是一次性架構決策,而是由執行期邊界支撐的營運流程。