Skip to content

Composer 2.10 新增套件政策管理:統一封鎖惡意軟體與自訂規則

原文連結:https://nesbitt.io/2026/05/29/composer-dependency-policies.html

文章說明

Composer 2.10 推出全新 config.policy 設定區塊,將安全通報、惡意軟體偵測、廢棄套件警告與自訂黑名單整合在單一配置介面下。這個設計參考了 uBlock Origin 的過濾清單模式,讓組織可以訂閱多個第三方政策來源,也能自訂企業內部的套件管控規則。

內容介紹

Composer 2.10 的 config.policy 讓每個政策清單都擁有三個控制開關:block(從解析器移除匹配版本)、audit(ignore/report/fail 三種模式)、ignore(針對特定套件設定例外,可搭配版本約束)。預設啟用的 malware 清單由 Aikido 以 CC-BY 4.0 授權提供資料,會在 composer install 階段就封鎖被標記的版本——即使你的 lockfile 鎖定時該版本還是乾淨的,後續被標記後也會在安裝時被攔下。

Packagist.org 目前在其 packages.json 中宣告支援一個清單:malware。當 Composer 進行解析時,它會從已經在抓取的 per-package metadata 檔案中讀取新的 filter 欄位,無需額外 HTTP 往返。對於 composer installcomposer audit(這兩個指令通常不會對每個鎖定套件都打 API),repository 可以提供 summary-url(單一 JSON 檔案列出所有被標記的套件)或 api-url(接受 PURL POST 請求,只回傳匹配項目)。Packagist 的 summary 檔案目前包含約 70 個套件。

最有趣的設計是 malware 並非保留名稱——它只是一個內建預設的知名清單。你可以在 config.policy 下定義任何自訂清單名稱(例如 company-policy),搭配相同的 block/audit/ignore 選項,資料來源可以來自:(1) 宣告該清單名稱的 Composer repository,(2) sources 中配置的 HTTPS 端點,(3) 兩者合併。Composer 會 POST 專案的相依套件 PURL 和清單名稱給各個來源,取得與 Packagist 相同格式的 filter 條目。

這個開放架構意味著任何組織或社群都能發布自己的政策清單:拼寫錯誤套件清單、法務部門尚未核准的套件清單、或是 cargo-vet 風格的「經人工審查」白名單。目前保留的未來清單名稱包括 licensesupportmaintenanceminimum-release-age(時間冷卻機制)。值得注意的是,目前的資料格式已經可以支援白名單模式——只要將邏輯反轉,保留匹配項目而非移除它們。

與其他套件管理器相比:PyPI 的 project quarantine、npm 的套件移除+佔位發布、RubyGems 的 yank、Hex.pm 的 retire 都是伺服器端移除,優點是所有客戶端(包括十年前的舊版)都能自動受保護,缺點是只有 registry 管理員的判斷生效。Composer 的設計是套件留在 registry 上但加上標記,由客戶端配置決定要採納哪些標記——代價是 Composer 2.8 的舊安裝不會理會這些標記,直到 Packagist 的手動 yank 追上。Socket 的 safe npm、Aikido 的 Safe Chain、cargo-deny 都是在安裝前檢查套件的 CLI wrapper 或 CI 工具,Composer 的 config.policy 則是首個將這種機制直接整合進套件管理器核心的實作。

你可以帶走的重點

  1. 統一政策介面:安全通報、惡意軟體、廢棄套件、自訂規則都用同一套 block/audit/ignore 配置,降低學習成本。
  2. 安裝時防護:即使 lockfile 鎖定的版本後來被標記為惡意,composer install 也會攔截,比事後 audit 更主動。
  3. 開放資料生態:任何人都能發布政策清單(透過 HTTPS 端點),不需要成為 Packagist 官方合作夥伴,組織可以自建內部規則來源。
  4. PURL 標準協定:底層使用 Package URL 格式,有機會成為跨工具的政策交換標準。
  5. 未來擴充性:保留的 licenseminimum-release-age 名稱暗示未來會加入授權檢查和時間冷卻機制,全都走同一套配置模式。

適合誰閱讀

  • PHP 專案維護者,想強化供應鏈安全
  • 需要制定企業級套件管控政策的技術主管
  • 對套件管理器安全機制設計感興趣的工程師
  • 關注供應鏈安全與依賴治理的團隊

由 Wo9Fei 製作