Featured image of post 審核 NPM 依賴關係:Snyk 和自動化修補程式管理Featured image of post 審核 NPM 依賴關係:Snyk 和自動化修補程式管理

審核 NPM 依賴關係:Snyk 和自動化修補程式管理

使用審核檢查器掃描巢狀 npm 有效負載中的漏洞並整合 Github 自動安全警報。

供應鏈問題

現代 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 fixGitHub 操作、CLI
依賴機器人npm、pip、Docker 等汽車公關原生 GitHub
裝修npm、Docker、自訂自動 PR,可設定的時間表GitHub 應用程式

概括

對於生產項目來說,依賴審計不是可選的。從本機工作流程中的 npm audit 開始,在 GitHub 上啟用 Dependabot 以實現自動化 PR,並將 npm audit --audit-level=high 整合到 CI 管道中。如需更深入的覆蓋,請新增 Snyk 以擷取容器和授權問題。分層方法可確保傳遞依賴項中的漏洞在到達生產環境之前被捕獲。