Аудит Strapi за 3 дня

Аудит Strapi у нас занимает три рабочих дня и идёт по чек-листу из 20 пунктов: версии, права в API, токены и секреты, бэкапы, медиа, сервер, скорость и плагины. На выходе документ с приоритетами: что чинить сегодня, что в этом месяце, что можно отложить, и оценка часов по каждому пункту. Ниже весь чек-лист с тем, как проверяем и что обычно находим.

Когда нужен аудит

Чек-лист из 20 пунктов

Версии и зависимости

№Что проверяемКакЧто обычно находим
1Версия Strapipackage.json и lock-файл, сравниваем с актуальной 5.56 и со списком закрытых уязвимостейStrapi 4 без патчей или Strapi 5 ниже 5.37.0, где открыта критическая утечка данных CVE-2026-27886
2Версия Node.jsНа сервере и в DockerfileNode 18 или 20. Strapi 5 поддерживает только LTS 22, 24 и 26
3Уязвимые пакеты`npm audit` на копии, отдельно production-зависимостиДесятки предупреждений, из них важны те, что в рантайме, а не в сборке
4База данныхВерсия и драйверMySQL 5 (Strapi 5 требует 8.0+), PostgreSQL старше 14, SQLite на проде

Права и доступы

№Что проверяемКакЧто обычно находим
5Роль PublicSettings > Users & Permissions > Roles > Public, каждое действие по каждому типуОткрытые `find` на коллекциях, которые фронту не нужны, `create` без капчи, доступ к пользователям
6API-токеныSettings > API Tokens: тип, срок, когда использовалсяТокены Full access без срока, созданные прежним подрядчиком "на время"
7АдминистраторыСписок пользователей админки и их ролиУчётки уволенных сотрудников и прежних подрядчиков с ролью Super Admin
8Регистрация и JWT`config/plugins`: `jwtManagement`, `jwt.expiresIn`, `register.allowedFields`, `ratelimit`JWT на год при `legacy-support`, выключенный `ratelimit`, открытая регистрация, которой никто не пользуется
9Админка`config/admin`: `auth.sessions`, `rateLimit`, `forgotPassword`, `serveAdminPanel`, доступ по IPАдминка открыта всему интернету, лимит попыток входа выключен
10Доступы людейСервер, хостер, DNS, репозиторий, S3, почта: у кого есть ключи и паролиSSH-ключи прежних подрядчиков в authorized_keys, общий пароль от панели хостера

Секреты и конфигурация

№Что проверяемКакЧто обычно находим
11Ключи Strapi`APP_KEYS`, `ADMIN_JWT_SECRET`, `JWT_SECRET`, `API_TOKEN_SALT`, `TRANSFER_TOKEN_SALT`, `ENCRYPTION_KEY`Значения из примера `.env.example`, одинаковые ключи на тесте и проде
12Секреты во фронтеПеременные с префиксом `NEXT_PUBLIC_`, `VITE_`, собранный бандл, история gitAPI-токен с полным доступом в клиентском коде, `.env` в репозитории
13CORS и заголовки`config/middlewares`: `strapi::cors` (`origin`), `strapi::security``origin: '*'` или список с тестовыми доменами
14Docker и окружениеDockerfile, docker-compose, `NODE_ENV`, открытые портыПорт 1337 и порт базы открыты наружу, контейнер от root, `NODE_ENV=development` на проде

Данные, медиа и сервер

№Что проверяемКакЧто обычно находим
15БэкапыЕсть ли, где лежат, разворачиваем из последнего на чистой машинеБэкап только базы без медиа, бэкап на том же диске, бэкап, из которого сайт не поднимается
16МедиаГде хранится `public/uploads`, провайдер загрузки, лимиты размераФайлы внутри контейнера без тома, пропадут при пересборке; посторонние файлы в папке загрузок
17Nginx и HTTPSКонфиг, сертификат и его продление, `client_max_body_size`, редиректыСертификат продлевается вручную, лимит 1 МБ по умолчанию и ошибка 413 при загрузке картинок
18Логи и мониторингКуда пишутся логи, ротация, есть ли уведомленияЛоги никто не читает, диск забит логами за два года

Скорость и код

№Что проверяемКакЧто обычно находим
19Скорость ответовВремя ответа основных эндпоинтов, размер ответа, запросы с `populate``populate=*` или плагин deep populate на главной, ответ на мегабайты, страница собирается секунды
20ПлагиныСписок, автор, дата обновления, наличие версии для Strapi 5, `postinstall`-скриптыЗаброшенные плагины, которые блокируют обновление; пакеты неизвестных авторов

Про двадцатый пункт отдельно. В апреле 2026 года исследователи SafeDep нашли 36 вредоносных npm-пакетов, которые выдавали себя за плагины Strapi. При установке они запускали postinstall-скрипт, забирали .env и ключи, лезли в Redis и Postgres и открывали удалённый доступ к серверу. Поэтому смотрим не только на то, нужен ли плагин, но и кто его автор и что он делает при установке.

Что получаете на выходе

Документ, в котором каждый пункт чек-листа отмечен одним из трёх статусов:

СтатусЧто значитПример
КритичноЧинить сегодня или завтра, риск потери данных или взломаОткрытый доступ к пользователям у роли Public, токен Full access во фронте, нет бэкапов
ВажноЧинить в этом месяцеNode 20, сертификат продлевается вручную, медиа внутри контейнера
Можно отложитьНе горит, но стоит в планМедленный populate на второстепенных страницах, заброшенный плагин, который пока работает

По каждому пункту: что нашли, чем это грозит простыми словами, как исправить и сколько часов займёт. Если проект на Strapi 4, отдельным разделом идёт оценка обновления до пятой версии: какие плагины придётся заменить, сколько своего кода переписывать, в какую вилку сроков попадает проект. Сам порядок обновления описан на странице обновление Strapi 4 до 5.

Документ написан так, чтобы его понял владелец сайта, а не только разработчик. Его можно отдать своему подрядчику или нам, как решите.

Как проходят три дня

  1. В первый день получаем доступы на чтение, разворачиваем копию проекта с боевой базой, снимаем версии и конфигурацию. Боевой сервер ничем не нагружаем.
  2. Во второй проходим права, токены, секреты, плагины и зависимости на копии, смотрим сервер, Nginx, бэкапы и логи. Пробуем восстановить сайт из последнего бэкапа.
  3. В третий замеряем скорость API, собираем отчёт, созваниваемся и проходим по критичным пунктам.

Если в первый же день находим открытую дыру, через которую прямо сейчас утекают данные, не ждём третьего дня: сообщаем сразу и предлагаем, как закрыть. Если видим следы взлома, переходим к плану из статьи если сайт на Strapi взломали.

Что не входит

Аудит это проверка и отчёт, исправлений в него не входит. Починка критичных пунктов идёт отдельно по часам или в первый месяц поддержки. Нагрузочное тестирование и пентест с попытками взлома тоже отдельная работа, для большинства сайтов на Strapi они не нужны.

Если проект принимаете от другого подрядчика, список того, что у него забрать до аудита, есть на странице передача проекта. Как устроен правильный docker-compose для Strapi 5, с которым мы сравниваем ваш: strapi.tech.

Пришлите адрес сайта и админки и скажите, кто сейчас ведёт проект. Через день ответим, когда можем начать аудит и что понадобится из доступов.

Частые вопросы

Сколько стоит аудит Strapi?

Аудит занимает три рабочих дня, сумму называем после первого просмотра проекта, обычно в тот же или на следующий день. Она зависит от того, сколько окружений (только прод или ещё тестовый сервер), есть ли мобильное приложение и интеграции, которые ходят в API. Если после аудита остаётесь у нас на поддержке, первый месяц работ строится по его отчёту.

Нужен ли доступ к боевому серверу?

Нужен доступ на чтение: посмотреть конфигурацию Nginx, контейнеры, переменные окружения, логи и бэкапы. Ничего на боевом сервере во время аудита не меняем. Проверки, которые что-то нагружают или ломают, делаем на копии.

Можно провести аудит без репозитория?

Частично. Код Strapi можно достать с сервера, если он там собирается, а по базе видно типы контента и права. Но без репозитория не проверить историю: были ли секреты в коммитах, какие правки делал прежний подрядчик. Отсутствие репозитория само по себе попадёт в отчёт как критичный пункт.

Чем аудит отличается от npm audit?

npm audit показывает известные уязвимости в пакетах, это один пункт из двадцати. Он не видит, что у роли Public открыт доступ к пользователям, что API-токен с полным доступом лежит во фронте, что бэкапы не восстанавливаются, а медиа хранятся внутри контейнера. Самое опасное на реальных проектах обычно в настройках, а не в пакетах.

Проверяете ли вы проект на уже случившийся взлом?

Да, это входит: смотрим папку загрузок на посторонние файлы, cron и запущенные процессы, список администраторов и API-токенов, логи Nginx на подозрительные запросы. Если находим следы взлома, аудит останавливается и переходим к плану действий при взломе.

Обсудим ваш проект

Нажимая кнопку, вы соглашаетесь на обработку персональных данных для ответа на заявку.