Уязвимости зависимостей и npm audit
↑ 7.3 Безопасность фронтенда · ← Предыдущая
Зачем это на собесе
Большая часть кода в проекте — чужая. Спрашивают, как вы управляете цепочкой поставок.
Риски
- известные 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).
Вопросы с ответами
Как защититься от атак через зависимости?
Lock-файл и
npm ci, автоматические обновления с ревью, аудит в CI, отключение install-скриптов, SRI для CDN, минимум зависимостей.
Что делать, если уязвимость в транзитивной зависимости, а патча нет?
Проверить достижимость, обновить родителя, применить
overridesна исправленную версию, при отсутствии фикса — заменить пакет или ограничить использование.