
# npm 12 正式推出:預設禁用 Install Scripts,供應鏈安全大升級
GitHub 日前正式發佈 **npm 12**,呢個版本帶嚟咗幾項重大安全變更,對整個 JavaScript 生態系統影響深遠。最關鍵嘅改動係:**install scripts 預設禁用**,開發者必須主動審批先可以執行。
## npm 12 三大安全改動
npm 12 引入咗三項預設關閉嘅行為,全部同供應鏈安全有關:
### 1. Install Scripts 預設禁用(–allowScripts 預設 off)
以往 npm install 會自動執行 package 嘅 lifecycle scripts(preinstall、install、postinstall)同 node-gyp builds。呢個機制一直被黑客濫用——只要一個惡意 package 喺 install script 入面藏咗 malware,你一行 `npm install` 就即刻中招。
npm 12 將 `–allowScripts` 預設改為 `off`,開發者需要執行以下指令審批 trusted scripts:
npm approve-scripts --allow-scripts-pending
審批結果會寫入 `package.json` 嘅 allowlist,之後嘅 install 只會執行已批准嘅 scripts。
### 2. Git Dependencies 預設禁用(–allow-git 預設 none)
直接引用 Git repository 嘅 dependencies(無論 direct 定 transitive)預設唔會再被解析。呢個改動防止攻擊者透過篡改 Git repo 注入惡意代碼。
### 3. Remote URL Dependencies 預設禁用(–allow-remote 預設 none)
從 remote URL(例如 https tarballs)引用嘅 dependencies 預設唔會再被解析,進一步收窄攻擊面。
## Granular Access Tokens 權限收緊
npm 12 同時收緊咗 **Granular Access Tokens(GATs)** 嘅權限:
– **2026 年 8 月起**:設定為 bypass 2FA 嘅 GATs 將無法執行敏感操作,包括建立/刪除 tokens、修改 package 權限、管理組織成員等
– **2027 年 1 月起**:GATs 將失去直接 publish 能力,只能讀取 private packages 同 staged publish(需要 human 2FA approval)
GitHub 建議開發者盡快遷移到 **Trusted Publishing(OIDC)** 或 **Staged Publishing** 模式,取代 long-lived publish tokens。
## 對香港 IT 團隊嘅影響
香港唔少企業嘅開發團隊都用緊 npm,特別係金融科技同電商平台。呢次 npm 12 嘅改動雖然提升咗安全性,但同時會影響 CI/CD pipeline:
1. **CI/CD 需要更新**:如果 pipeline 依賴 install scripts(例如 node-gyp 編譯 native modules),需要預先設定 allowlist
2. **Legacy projects 可能 break**:舊 project 引用咗 Git dependencies 或 remote URL packages 嘅,升級 npm 12 後要手動啟用相關選項
3. **Publish 流程要改**:用緊 GATs 做自動 publish 嘅團隊,要計劃遷移到 OIDC trusted publishing
## 業界反應
安全社羣普遍歡迎呢次改動。Socket 嘅安全研究員指出,npm 嘅 install scripts 一直係供應鏈攻擊嘅「薄弱環節」,禁用預設執行係「遲嚟但正確嘅一步」。
同時,pnpm 11.10 亦引入咗新嘅 `_auth` 設定,將 credentials 同 host 綁定,防止 project file 被篡改後 redirect tokens 去攻擊者嘅 server。
## 總結
npm 12 嘅安全改動標誌着 JavaScript 生態系統喺供應鏈安全方面嘅重要裏程碑。雖然短期內會帶嚟遷移成本,但長遠嚟講,呢啲改動可以大幅減少惡意 package 攻擊嘅成功率。建議香港嘅開發團隊盡快測試 npm 12,評估對現有 workflow 嘅影響,及早做好遷移準備。



