The secure way to release an npm package in 2026
Огромная статья от Evil Martians про то, как в 2026 публиковать npm-пакеты, чтобы их было сложнее угнать. В статье в самом начале есть чеклист, что надо сделать, чтобы снизить вероятность кражи пакета. А после чеклиста — почему именно важен каждый шаг и как выстраивается система защиты.
В целом чеклист следует завету «не доверяй никому, кроме себя».
Чеклист:
1. Trusted Publisher: укажите конкретный воркфлоу, с которого можно только публиковать staged-версии библиотек
2. Запретить публикацию через токены
3. Включить 2FA для всех
4. Дать возможность создавать теги в GitHub только админам
5. Зафиксировать версии GitHub Actions, которые вы используете
6. Добавьте автоматический линт безопасности
7. Установите 3 дня кулдауна на новые версии зависимостей
8. Используйте npm 12 или другой пакетный менеджер, который не исполняет postinstall-скрипты
9. Создайте workflow для публикации, как в статье
Это не гарантия безопасности, но очень снижает риски того, что ваш пакет украдут.
От каких конкретно рисков защита:
1. Trusted Publisher — разрешаем публикацию только конкретному воркфлоу
2. Запрещаем публикацию напрямую (без стейджинга) и через токены. Если токен украдут — опубликовать не смогут. Сам стейджинг гарантирует ручной апрув
3. 2FA требует подтверждения через второе устройство
4. Т.к. публикация только по тегам, то разрешаем создавать теги только админам
5. Фиксация версий GitHub Actions позволяет не попасться на взлом CI Actions
6. Линт безопасности автоматически проведёт основные проверки безопасности
7. Кулдаун 3 дня на новые зависимости даёт время обнаружить malware до того, как вы его подтянете
8. Запрет postinstall-скриптов убирает целый кластер атак
9. Аккуратный publish-workflow (без лишних deps в critical job) сужает поверхность атаки при релизе
И, конечно же, в статье есть скилл для агента, который настроит всё за вас.
https://evilmartians.com/chronicles/the-secure-way-to-release-an-npm-package
#development #javascript #npm #security #ci #supply-chain #evilMartians
Post #1425
1.1K