供應鏈問題
現代 JavaScript 應用程式提供了數以萬計的傳遞依賴項。每一個都是潛在的攻擊媒介。 event-stream 事件(2018 年)將惡意程式包注入到流行的依賴項中,這表示漏洞可能來自樹中的任何位置。在這種規模下,僅依靠人工審核是不可能的。
自動化工具是唯一實用的防禦措施。
新專案管理審計
內建 npm audit 指令將您的依賴關係樹與已知漏洞的精選資料庫進行比較。
npm audit
輸出按嚴重性(嚴重、高、中、低)分組,包括易受攻擊的路徑、修補版本和 CVE 參考。
┌───────────────┬────────────────────────────────────┐
│ critical │ Prototype Pollution in lodash │
├───────────────┼────────────────────────────────────┤
│ package │ lodash │
│ patched in │ >=4.17.21 │
│ dependency │ root → express → ... → lodash │
└───────────────┴────────────────────────────────────┘
npm audit fix # auto-update to safe versions
npm audit fix --force # allow breaking changes
在應用之前使用 --dry-run 預覽變更。
限制
npm audit僅涵蓋 npm 註冊表諮詢資料庫。它不會掃描所有 CVE 條目,只會掃描 npm 報告和接受的條目。- 對於那些從未在您的上下文中執行易受攻擊的程式碼路徑的框架,誤報很常見。
- 該命令需要透過網路存取註冊表。離線審計需要本地諮詢鏡像。
Snyk:更深層的選擇
Snyk 不僅掃描 npm,還掃描 package-lock.json、yarn.lock、pnpm-lock.yaml、Docker 映像和 IaC 範本。它提供了更豐富的 CLI 和 GitHub/GitLab 整合。
npm install -g snyk
cd my-project
snyk auth
snyk test
斯尼克提供:
- 修正 PR — 自動建立更新易受攻擊的依賴項的拉取請求
- 許可證合規性 — 標記 GPL/AGPL 軟體包以供法律審查
- 容器掃描 — 偵測 Docker 映像中易受攻擊的作業系統包
- 可存取的漏洞分析 - 過濾掉您的應用程式從未使用的程式碼路徑中的漏洞
GitHub 依賴機器人
GitHub 的原生 Dependabot 會監視您的儲存庫中是否有過時且不安全的依賴項。
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
Dependabot 會自動開啟具有版本升級的 PR。每個 PR 都包含變更日誌、發行說明和嚴重性摘要。
CI/CD 管道集成
審計必須自動化。典型的 GitHub Actions 工作流程:
name: Dependency audit
on: [push, pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
- run: npm audit --audit-level=high
將 --audit-level=high 設定為僅在高漏洞或嚴重漏洞上使建置失敗,從而避免低嚴重性問題的雜訊失敗。
鎖文件安全
package-lock.json 檔案固定每個傳遞依賴項的確切版本。如果沒有它,npm install 會在安裝時解析版本,可能會引入受損的補丁。
- 始終將
package-lock.json提交至版本控制 - 在 CI 中使用
npm ci(而非npm install)進行確定性安裝 - 在審核工作流程中啟用鎖定檔驗證
比較工具
| 工具 | 範圍 | 修復機制 | CI 整合 |
|---|---|---|---|
| npm 稽核 | npm 註冊表建議 | 佔位符_0 | 佔位符_1 |
| 斯尼克 | npm、Docker、IaC、許可證 | 修復 PR,snyk fix | GitHub 操作、CLI |
| 依賴機器人 | npm、pip、Docker 等 | 汽車公關 | 原生 GitHub |
| 裝修 | npm、Docker、自訂 | 自動 PR,可設定的時間表 | GitHub 應用程式 |
概括
對於生產項目來說,依賴審計不是可選的。從本機工作流程中的 npm audit 開始,在 GitHub 上啟用 Dependabot 以實現自動化 PR,並將 npm audit --audit-level=high 整合到 CI 管道中。如需更深入的覆蓋,請新增 Snyk 以擷取容器和授權問題。分層方法可確保傳遞依賴項中的漏洞在到達生產環境之前被捕獲。

