Инженер GitHub Джейми Маги предлагает сделать скрипты установки opt-in по умолчанию — самое важное изменение безопасности npm за последние годы. Как это повлияет на каждого JavaScript-разработчика, что делать сегодня и руководство по миграции для авторов пакетов.
15 мая 2026 года инженер GitHub Джейми Маги (Jamie Magee) опубликовал RFC,
предлагающий фундаментальное изменение в том, как npm обрабатывает скрипты установки
(preinstall, install, postinstall, prepare).
Суть проста: вместо автоматического выполнения скриптов зависимостей, npm должен требовать
явного согласия разработчика.
RFC был опубликован в JavaScript Weekly Issue 786 (19 мая 2026) и Node Weekly Issue 625 (21 мая 2026), где его назвали давно назревшим улучшением безопасности для экосистемы npm. Предложение напрямую решает проблему, которая делает npm аутсайдером: это единственный крупный менеджер пакетов, запускающий скрипты зависимостей по умолчанию.
Согласно предложению, при запуске npm install <package>, если у пакета
есть скрипты установки, npm будет либо:
allowedScripts, или--allow-scripts для их выполненияТочный UX-механизм ещё обсуждается, но направление ясно: нулевое доверие по умолчанию для скриптов установки.
Скрипты установки — основной вектор атак на цепочку поставок npm. Когда вы запускаете
npm install, любой пакет в дереве зависимостей может выполнить произвольный код
через скрипты жизненного цикла — до того, как исходный код пакета будет полностью
установлен. Это не теоретическая проблема.
Червь Mini Shai-Hulud
(апрель–май 2026) скомпрометировал более 170 npm-пакетов в экосистемах TanStack, Mistral AI,
UiPath и других, внедряя код для кражи учётных данных через хуки preinstall.
Атака сработала потому, что npm запускал эти скрипты автоматически — без подтверждения
пользователя, предупреждения или аудита.
Вредоносное ПО использовало хук preinstall для загрузки и выполнения нагрузки
на базе Bun, которая похищала токены GitHub, учётные данные npm, облачные ключи и секреты
CI/CD. Затем украденные данные использовались для публикации скомпрометированных версий
других пакетов, создавая червеобразную цепочку распространения. Весь вектор атаки зависел
от поведения npm по умолчанию — запускать скрипты без вопросов.
Атаки через скрипты установки — не редкость. Исследователи безопасности задокументировали
сотни случаев, когда вредоносные пакеты использовали хуки postinstall или
preinstall для:
.bashrcБолее 60% вредоносных npm-пакетов использовали скрипты установки как вектор выполнения. Переход на opt-in предотвратил бы большинство атак на цепочку поставок npm за последние три года.
npm — аутсайдер. Все остальные крупные менеджеры пакетов относятся к скриптам установки с подозрением:
| Менеджер пакетов | Скрипты по умолчанию? | Механизм opt-in |
|---|---|---|
| npm (текущий) | Да — всегда | --ignore-scripts или .npmrc ignore-scripts=true |
| npm (RFC) | Нет — требуется opt-in | allowedScripts или --allow-scripts |
| pnpm | Нет — заблокированы | pnpm allow-scripts или allowedScripts |
| Yarn Classic | Да (устаревшее поведение) | yarn install --ignore-scripts |
| Yarn Berry (v2+) | Требует настройки | dependenciesMeta с built: false |
| Deno | Нет — скрипты не запускаются | Н/Д — плоские URL, нет lifecycle hooks |
| Bun | По умолчанию (npm-совместимость) | Поддерживает --ignore-scripts |
Вывод очевиден: pnpm уже использует тот же механизм, который предлагает npm, и это не сломало экосистему. Deno и Berry доказывают, что другая модель жизнеспособна. Предложение npm наконец-то приводит его в соответствие с остальной экосистемой.
Ещё до внедрения RFC (а RFC в npm исторически занимают от месяцев до лет) есть конкретные шаги, которые стоит предпринять сегодня.
ignore-scripts=true в .npmrcЭто единственная самая эффективная мера безопасности:
# ~/.npmrc или .npmrc в корне проекта
ignore-scripts=true
С этой настройкой npm будет загружать пакеты, но не выполнять скрипты установки. Затем можно выборочно разрешать скрипты для доверенных пакетов:
# Установка с выполнением скриптов для конкретного пакета
npm install some-package --ignore-scripts=false
Возможно, у вас уже есть пакеты, полагающиеся на скрипты установки. Найдите их:
# Список всех пакетов со скриптами жизненного цикла
npx npm-query-lifecycle-scripts
# Или вручную через package.json
find node_modules -name "package.json" -exec grep -l '"postinstall"\|"preinstall"\|"prepare"' {} \;
Типичные легитимные случаи использования скриптов установки:
sharp, node-gyp, esbuild компилируют или загружают бинарники под платформуprisma generate, graphql-codegenВ CI/CD всегда используйте строгий режим:
# Лучшая практика CI/CD — не запускать скрипты установки
npm ci --ignore-scripts
# Затем сборка с явными шагами
npm run build
Если вы поддерживаете npm-пакет, использующий скрипты установки, RFC влияет на вас напрямую. Когда npm сделает скрипты opt-in, разработчики могут не одобрить ваши скрипты — и пакет сломается молча.
Проверьте package.json на наличие скриптов жизненного цикла:
{
"scripts": {
"postinstall": "node postinstall.mjs",
"preinstall": "node setup.mjs",
"prepare": "husky"
}
}
Спросите себя: действительно ли этот скрипт должен выполняться при установке? В большинстве случаев ответ — нет.
| Текущий паттерн | Лучшая альтернатива |
|---|---|
postinstall для сборки |
Переместить в build или prepare (только при публикации) |
postinstall для нативных бинарников |
Использовать optionalDependencies с предварительно собранными пакетами (например, @img/sharp-libvips-linux-x64) |
postinstall для генерации кода |
Требовать явный npm run generate или использовать prepublishOnly |
postinstall для сообщений |
Заменить на раздел в README.md или документировать скрипт setup |
prepare для git hooks (husky) |
Husky v9+ уже требует husky init — явно, а не автоматически |
preinstall для проверок совместимости |
Использовать поле engines с engine-strict |
RFC по скриптам установки — не изолированное событие. 2026 год стал трансформационным для безопасности npm. Экосистема проходит через самое значительное ужесточение безопасности в своей истории.
Анонсированное на той же неделе, что и RFC, новое staged publishing в npm предоставляет период проверки перед публикацией пакетов. Это предотвращает атаки, когда злоумышленники публикуют вредоносные версии, мгновенно доступные миллионам разработчиков.
Предварительная версия npm 12.0 уже опубликована. Хотя точный список изменений формируется, значительный скачок версии с 11.x указывает на серьёзные breaking changes — возможно, включающие RFC по скриптам установки или его раннюю реализацию.
Функция Script Security npm, предупреждающая о пакетах со скриптами жизненного цикла при установке, стала общедоступной (GA) в феврале 2026. Это был первый шаг на пути к RFC — от предупреждений к блокировке по умолчанию.
npm теперь требует двухфакторную аутентификацию для мейнтейнеров пакетов с высокой загрузкой, закрывая вектор захвата аккаунтов. Это дополняет RFC, решая другую часть поверхности атаки: кто может публиковать, а не что выполняется при установке.
Если вы ничего не сделаете сегодня, добавьте это в ваш ~/.npmrc:
ignore-scripts=true. Затем, когда пакет, которому вы доверяете, требует
скрипты, разрешите их явно: npm install --ignore-scripts=false. Это
одно изменение блокирует вектор атаки, использованный Mini Shai-Hulud и большинством
других атак на цепочку поставок npm.
Для безопасной веб-разработки — обращайтесь
RFC по скриптам установки npm представляет фундаментальный сдвиг в подходе JavaScript-экосистемы к безопасности. Он признаёт, что поведение по умолчанию, сделавшее npm успешным — автоматическое выполнение скриптов установки — стало его главной слабостью.
Как разработчики, мы доверяли скриптам установки по умолчанию, потому что не было альтернативы. RFC это меняет. Экосистема переходит от "доверять по умолчанию, аудировать в исключениях" к "аудировать по умолчанию, доверять в исключениях". Это правильное направление.
Если вы создаёте веб-приложение и хотите работать с разработчиком, который серьёзно относится
к безопасности зависимостей — не как к запоздалой мысли, а как к встроенной практике —
свяжитесь со мной. Я full-stack разработчик
с более чем 20-летним опытом, и каждый проект я строю с --ignore-scripts,
зафиксированными зависимостями, проверками целостности lockfile и автоматическим сканированием
безопасности с первого дня.
Есть проект? Помогу выбрать безопасный, современный стек технологий и реализовать его. Бесплатная первичная консультация.