Уязвимости зависимостей и npm audit

↑ 7.3 Безопасность фронтенда · ← Предыдущая

Желательно~3 мин чтенияУровень: senior

Зачем это на собесе

Большая часть кода в проекте — чужая. Спрашивают, как вы управляете цепочкой поставок.

Риски

  • известные CVE в пакетах;
  • typosquatting (похожее имя пакета);
  • захваченные аккаунты мейнтейнеров, вредоносные обновления;
  • вредоносные postinstall-скрипты;
  • dependency confusion (приватное имя публикуется в публичном реестре).

Инструменты

npm audit                    # известные уязвимости
npm audit --omit=dev         # только прод-зависимости
npm audit fix                # безопасные обновления
npm ci                       # строго по lock-файлу
npm outdated                 # устаревшие пакеты

Дополнительно: Dependabot, Renovate (автоматические PR), Snyk, OWASP Dependency-Check, Socket.dev, OSV-Scanner.

Практики

  • lock-файл в репозитории и npm ci в CI;
  • фиксировать версии, обновления пачками через PR с прогоном тестов;
  • --ignore-scripts или ignore-scripts=true в .npmrc (включать выборочно);
  • проверять новые зависимости: активность, число загрузок, лицензия, размер;
  • минимум зависимостей: «нужна ли библиотека ради одной функции»;
  • SRI (integrity) для скриптов с CDN;
  • проверка лицензий (license-checker);
  • SBOM (CycloneDX) для требований безопасности;
  • npm provenance и подписи.
<script src="https://cdn.example.com/lib.js"
        integrity="sha384-..." crossorigin="anonymous"></script>

Нюансы

  • npm audit шумит по dev-зависимостям и недостижимым путям: оценивайте эксплуатируемость;
  • транзитивные зависимости чинят через overrides (npm) или resolutions (yarn).

Вопросы с ответами