npm 12: скрипты установки отключены по умолчанию — новый уровень безопасности

Менеджер пакетов npm, неотъемлемая часть экосистемы JavaScript, выпустил версию 12 с радикальными изменениями в области безопасности. Теперь выполнение скриптов при установке пакетов отключено по умолчанию — пользователям придётся явно разрешать запуск кода, включая так называемые неявные сборки. Эт

npm 12: скрипты установки отключены по умолчанию — новый уровень безопасности

Менеджер пакетов npm, неотъемлемая часть экосистемы JavaScript, выпустил версию 12 с радикальными изменениями в области безопасности. Теперь выполнение скриптов при установке пакетов отключено по умолчанию — пользователям придётся явно разрешать запуск кода, включая так называемые неявные сборки. Это решение направлено на снижение рисков, связанных с автоматическим выполнением скриптов, которые могут содержать вредоносный код.

Что нового в npm 12: скрипты установки по умолчанию отключены

Главное изменение: при установке пакетов npm больше не будет выполнять скрипты, указанные в поле "scripts" файла package.json. Это касается не только явных скриптов (preinstall, postinstall и т.д.), но и неявных сборок, которые могут запускаться автоматически. Теперь пользователь должен явно одобрить выполнение скриптов, например, с помощью флага --allow-scripts или конфигурации в .npmrc. Это значительный сдвиг от прежнего поведения, когда скрипты выполнялись по умолчанию, что создавало потенциальные уязвимости.

Кроме того, npm 12 ограничивает установку пакетов из источников, не являющихся реестром. Это означает, что установка напрямую из GitHub-репозиториев или других URL теперь потребует дополнительного подтверждения. Такие меры призваны защитить пользователей от атак, когда вредоносный код может быть внедрён через неофициальные источники.

Предыстория и контекст: почему это важно

Проблема безопасности npm не нова. В течение многих лет сообщество критиковало npm за автоматическое выполнение скриптов при установке пакетов. Это позволяло злоумышленникам распространять вредоносное ПО через популярные пакеты. Например, в 2022 году были обнаружены пакеты, которые крали учётные данные через postinstall-скрипты. Такие инциденты подорвали доверие к экосистеме и вызвали требования ужесточить политику безопасности.

Новое обновление — это ответ на эти призывы. Оно делает установку пакетов более безопасной, но требует от разработчиков осознанного подхода. Теперь они должны оценивать доверие к пакету перед тем, как разрешить выполнение его скриптов. Это может замедлить процесс установки, но значительно снижает риски.

Как это работает: что нужно знать разработчикам

При установке пакета с помощью npm install npm 12 теперь пропускает скрипты, если они не разрешены. Чтобы разрешить выполнение скриптов, можно использовать флаг --allow-scripts при установке, например: npm install --allow-scripts. Также можно настроить это глобально в файле .npmrc, добавив строку allow-scripts=true. Однако эксперты рекомендуют разрешать скрипты только для доверенных пакетов, чтобы минимизировать риски.

Кроме того, npm 12 вводит понятие "доверенные источники". По умолчанию разрешена установка только из реестра npm. Если вы пытаетесь установить пакет напрямую с GitHub, вам потребуется явно указать это в конфигурации. Это может быть неудобно, но повышает безопасность.

Технические детали и сравнение с предыдущими версиями

В npm 11 и более ранних версиях скрипты выполнялись автоматически, что было удобно для пакетов, требующих сборки нативно. Однако это создавало серьёзные риски. Новая версия меняет модель безопасности: теперь безопасность по умолчанию, а удобство — по запросу. Это похоже на подход, который уже используют другие менеджеры пакетов, например, Yarn с его флагом --ignore-scripts или pnpm с опцией --ignore-scripts.

Однако npm 12 идёт дальше, делая отключение скриптов поведением по умолчанию. Это означает, что разработчикам придётся активно включать выполнение скриптов, что может нарушить работу некоторых пакетов, которые полагаются на автоматическую сборку. Например, пакеты с нативными модулями (node-gyp) могут не установиться корректно без скриптов. Для таких случаев необходимо явно разрешить скрипты.

Кого затронет и как

Изменения в npm 12 затронут всех разработчиков JavaScript, использующих npm. Это и фронтенд-разработчики, и бэкенд-разработчики, и разработчики мобильных приложений на React Native. При обновлении npm до версии 12 важно проверить, какие пакеты требуют выполнения скриптов, и настроить соответствующие разрешения. Для компаний, которые используют npm в CI/CD, потребуется внести изменения в конфигурацию, чтобы скрипты выполнялись в нужных случаях.

В России и СНГ npm также широко используется, поэтому обновление затронет многих разработчиков. Рекомендуется заранее протестировать проекты на совместимость с npm 12 и обновить документацию по установке зависимостей.

Что будет дальше

Ожидается, что npm 12 станет новым стандартом в экосистеме JavaScript. В будущих версиях можно ожидать дальнейших улучшений безопасности, возможно, введение подписей пакетов или более тонкой настройки доверия. Пока же разработчикам стоит внимательно изучить документацию по миграции и адаптировать свои проекты.

Итог

npm 12 — это значительный шаг вперёд в безопасности JavaScript-экосистемы. Отключение скриптов по умолчанию снижает риски атак, но требует от разработчиков большей ответственности. Следите за обновлениями и адаптируйте свои процессы, чтобы оставаться в безопасности.