依存関係のセキュリティ
ルール
- CIで
npm audit を実行 — 高/重大な脆弱性がある場合はビルドを失敗させる
lockfile-lint を使用して、すべてのパッケージが公式のnpmレジストリに解決されることを検証する
package.json でメジャーバージョンを固定する:マイナーアップデートには ^ を使用し、* や latest は使用しない
- 新しい依存関係をインストールする前に確認する:npmのダウンロード数、最終公開日、メンテナー数をチェックする
npm ls --all を使用して推移的依存関係を監査する — 直接の依存関係はさらに何百ものパッケージを引き込む
- Snyk、Socket.dev、またはGitHub Dependabotを設定して、リアルタイムの脆弱性アラートを受信する
- 依存関係を毎週更新する — 古い依存関係は既知の脆弱性を蓄積する
- name: 依存関係の監査
run: npm audit --audit-level=high
- name: ロックファイルの整合性を検証
run: npx lockfile-lint --path package-lock.json --type npm --allowed-hosts npm --validate-https
{
"dependencies": {
"next": "^14.0.0",
"react": "^18.0.0",
"zod": "^3.0.0"
}
}
避けるべきこと
- パッケージを事前に確認せずに
npm install random-package を実行する — タイポスクワッティングは現実の脅威です
npm audit の警告を無視する — 既知の脆弱性は最も簡単な攻撃経路です
- バージョン範囲として
* や latest を使用する — 侵害された公開が即座にビルドに影響します
- 信頼できないパッケージからの
postinstall スクリプトを確認せずに実行する
- 人気のあるパッケージが安全だと決めつける —
event-stream(数百万ダウンロード)も侵害されました