
Доброго дня, читатель! Меня зовут Александр Роут, я — фронтенд‑разработчик в Домклик.
В сентябре 2025 г. в экосистеме npm произошёл тревожный инцидент: злоумышленники получили доступ к репозиториям нескольких популярных пакетов и внедрили в них вредоносный код. Этот код мог подменять адреса криптокошельков и перехватывать финансовые транзакции.
Этот случай — не первый и не последний в истории. Случившаяся атака вновь подняла важный вопрос: «Насколько мы можем доверять сотням зависимостей, которые добавляем в свои проекты?» Часто мы устанавливаем пакеты, практически не задумываясь о том, что именно скачиваем и запускаем. Особую опасность представляют postinstall‑скрипты, способные выполнять произвольные действия на вашем компьютере сразу после установки.
Защита «после»: что не так с привычными инструментами
На сегодняшний день самая распространённая практика — проверка зависимостей после их установки. Многие разработчики полагаются на встроенные в npm утилиты или коммерческие сканеры. Самым популярным из них является npm audit. Этот инструмент сканирует дерево зависимостей и сверяет версии пакетов с базой известных уязвимостей. Он полезен, но его главный недостаток заключается в том, что проверка происходит уже после того, как пакет попал в проект. Это создаёт критическое «окно» для потенциально вредоносных postinstall‑скриптов, которые могут сработать ещё до того, как пакет будет проанализирован.
Решение «до»: npq — ваш первый фильтр

Один из эффективных способов решить проблему «окна уязвимости» — проверить пакет до его установки. В этом случае поможет утилита npq — это обёртка (CLI‑wrapper) для npm install
, которая сканирует пакет перед его фактической установкой. Настроив npq через простой алиас, вы получаете дополнительный уровень защиты, анализирующий пакет по ряду ключевых критериев:
Метрики популярности: количество скачиваний и их динамика (резкий скачок может быть признаком компрометации)
Метаданные: наличие и качество документации, репозитория
Защита от typosquatting: проверка на схожие имена, чтобы избежать установки «поддельных» пакетов
Опасные скрипты: наличие preinstall-, install- или postinstall-скриптов, способных выполнять произвольный код
Подозрительное содержимое: внезапное появление исполняемых бинарников
«Красные флаги»: статус deprecated и другие предупреждения

Если проверка проходит без замечаний, то npq автоматически запускает установку, а при обнаружении «красных флагов» разработчик сам принимает решение о продолжении или отмене процесса. Таким образом, npq помогает принять осознанное решение ещё до того, как пакет попадёт в вашу кодовую базу.
Ограничения, и когда npq не поможет
Важно понимать, что npq — не универсальное решение. Он является первой линией защиты, но не единственной, поскольку имеет ограничения:
Ложные срабатывания: новые или редкие, но при этом безопасные библиотеки могут показаться подозрительными, что приводит к ложным срабатываниям
Локальное применение: npq рассчитан на локальную проверку на компьютере разработчика, его использование в CI/CD‑процессах ограничено
Компрометация популярных пакетов: если злоумышленники атаковали уже устоявшийся и популярный пакет, то npq не сможет его заблокировать, а только предупредит о необычных признаках (например, о внезапном появлении postinstall-скрипта), давая повод задуматься
Для лучшей защиты необходим расширенный подход: многослойная защита, когда каждый инструмент отвечает за свой уровень — от превентивной проверки до анализа после установки.
Полноценная защита: многослойный подход
Для обеспечения надёжной защиты не стоит полагаться на один инструмент. Экосистема npm предлагает множество решений для построения многослойной системы безопасности.
Категория |
Инструменты |
Принцип работы |
Предварительная проверка |
npq, GuardDog |
Проверяют пакеты до установки, анализируя метаданные, скрипты и код на предмет подозрительного поведения |
SCA-сканеры |
Snyk, Sonatype, JFrog Xray |
Сканируют зависимости и репозитории, интегрируются в CI/CD и помогают автоматизировать политику безопасности |
Автоматические обновления |
Dependabot, Renovate |
Помогают быстро закрывать известные уязвимости (CVE), автоматически создавая PR с обновлениями зависимостей |
Контроль целостности |
lockfile-lint, Sigstore |
Обеспечивают проверку целостности и происхождения пакетов, предотвращая подмену. Sigstore позволяет удостовериться, что пакеты собраны из надёжного источника |
Комплексный подход к безопасности можно начать с простого набора инструментов, который покроет большинство рисков:
Локально: установите npq для каждого разработчика в качестве «входного фильтра» — это первый и самый доступный уровень защиты
CI/CD: внедрите в ваш CI-конвейер SCA-сканер, который будет автоматически сканировать все зависимости и блокировать сборку при обнаружении критических уязвимостей
Автоматизация: включите Dependabot или Renovate для автоматического обновления зависимостей, что позволит держать проект в актуальном состоянии и снизить риск атак, нацеленных на известные уязвимости
Гигиена: используйте lockfile-lint для проверки lock-файлов, чтобы убедиться, что все зависимости установлены из доверенных источников
Заключение
Безопасность в экосистеме npm — это не единичное решение, а многослойный процесс. npq добавляет первый уровень защиты, позволяя разработчику принять осознанное решение до установки пакета. Но для обеспечения полноценной безопасности этот локальный фильтр должен работать в связке с другими инструментами: автоматическими сканерами в CI, ботами для обновлений и инструментами для проверки целостности. Только такой комплексный подход позволяет надёжно защитить проект от постоянно меняющихся угроз.
David_Osipov
Я просто тупо постепенно переезжаю на Deno для своих петов, в нём пакетам по-умолчанию почти ничего не разрешено и надо давать разрешения пакетам вручную, да и написан на Rust. Есть слой совместимости с npm. За последние 3 месяца уже было 2 крупные атаки на npmjs, что уже чутка перебор.