Securing the NPM Supply Chain: An Introduction to safe-install
Node.js 生態系統一直受到供應鏈攻擊的困擾。套件在安裝期間執行任意腳本的能力——這是一項對某些建置程序至關重要的功能,但對開發者而言卻是危險的漏洞——長期以來已成為一個重大的攻擊向量。雖然像 Bun 這樣的現代運行時已經引入了限制這些腳本的機制,但標準的 npm 生態系統在預設情況下很大程度上仍是開放的。
The Challenge of Install Scripts
許多 npm 套件使用 preinstall、postinstall 和 install 腳本來編譯原生模組或進行初始設定。然而,這種機制允許您的依賴樹中的任何套件——包括深層的次依賴項——在 npm install 過程中在您的機器上執行代碼。如果一個套件遭到入侵,惡意攻擊者可以利用這些腳本來竊取環境變數、SSH 金鑰,或將惡意代碼注入您的建置管線。
Introducing safe-install
為了填補原生 npm 功能的這些空白,safe-install 被開發為一個輕量級工具,旨在為安裝過程提供一定程度的細粒度控制。它專注於兩個主要的安全性增強功能:
1. Trusted Build Dependencies
與 Bun 的 "trusted dependencies" 功能類似,safe-install 允許開發者預設禁用安裝腳本,並維護一個明確的依賴項允許清單,僅允許特定的依賴項執行其建置或安裝腳本。這將安全模型從「允許所有」轉向「拒絕所有,僅允許部分」,顯著地減少了專案的攻擊面。
2. Blocking Exotic Sub-dependencies
從 pnpm 的 blockExoticSubdeps 設定中汲取靈感,safe-install 提供了阻擋「異質次依賴項」的能力。這可以防止安裝那些未在 package.json 中明確宣告,或在依賴樹中顯得不尋常的套件,從而減輕了依賴項混淆或惡意套件隱蔽添加的風險。
Alternative Approaches to Supply Chain Security
雖然 safe-install 為本地保護提供了一個以開發者為中心的工具,但社群討論指出,不同規模的開發需要不同的策略。
Enterprise-Grade Repository Management
對於較大的組織而言,標準做法通常是完全放棄「牛仔式安裝」。工具如 Nexus 和 Artifactory 充當內部鏡像站和代理伺服器。在此模型中,開發者不會直接從公開的 npm registry 獲取套件,而是從內部儲存庫中獲取,該儲存庫僅託管經過 IT 驗證和安全性審查的套件。 esting_error: The user requested a single JSON array if multiple JSONs are requested. Here, only one object is requested. The user also requested