Чеклист перед продом: 15 минут

Не замена пентесту и не Snyk. Это минимальный ритуал, который ловит 80% «стыдных» выкаток — особенно когда diff написан с ИИ за один вечер. Каждый пункт: что проверить и критерий «ок / не ок». Время — около 15 минут на типичный pet-проект или микросервис.

Сначала — почему скорость без владения кодом опасна. После чеклиста — AuthZ (сканер это не закроет).

1. Секреты не в репозитории

git grep -iE '(password|secret|api_key|private_key|BEGIN RSA)' -- ':!*.md'
git log -p --all -S 'sk_live' --oneline | head

Ок: секреты только в .env / vault, файл в .gitignore, есть .env.example без значений. Не ок: ключ в коде, в коммите или в скриншоте для чата с ИИ.

2. Prod-конфиг отделён от dev

# примеры флагов — подставь свой стек
grep -rE 'DEBUG|APP_ENV|NODE_ENV' .env* config/ 2>/dev/null | head -20

Ок: на проде DEBUG=false, APP_ENV=production. Stack trace наружу не светится. Не ок: Laravel/ Django debug toolbar на battle-сервере.

3. Зависимости без критичных CVE

# выбери своё
composer audit 2>/dev/null || true
npm audit --audit-level=high 2>/dev/null || true
pip audit 2>/dev/null || true

Не обязательно ноль предупреждений — но high/critical в prod-зависимостях без плана фикса — не ок. ИИ часто тянет устаревшие пакеты «как в примере из 2021».

4. HTTPS везде, редирект с HTTP

curl -sI http://ваш-домен.ru | head -5
curl -sI https://ваш-домен.ru | head -5

Cookies с Secure, HSTS — по возможности. Самоподписанный сертификат на проде — не ок.

5. CORS и открытые админки

Не ок: Access-Control-Allow-Origin: * на API с cookie-сессией. Админка /admin доступна без VPN/IP-allowlist, если там PII или деньги.

6. Базовая аутентификация

  • пароли — bcrypt/argon2, не MD5;
  • JWT с коротким TTL + refresh или нормальные server-side сессии;
  • rate limit на login / reset password;
  • нет дефолтного admin/admin.

7. Логи без паролей и токенов

grep -rE '(password|Authorization:|Bearer )' storage/logs/ var/log/ 2>/dev/null | tail -5

Если нашлось — маскируй до прода. GDPR и зд здравый смысл.

8. Очевидный SQL и shell

Быстрый grep по diff:

git diff main...HEAD | grep -E '\$\{|\$\(|exec\(|shell_exec|eval\(|\.query\(.*\+'

Один красный флаг — разбирать, не «ну на prod не вызовут».

9. Загрузка файлов

Ок: whitelist расширений, файлы вне webroot или без исполнения. Не ок: загрузить .php в public/uploads.

10. Smoke на критичных путях

Руками, 3–5 минут:

  • логин / logout;
  • главный сценарий (заказ, оплата, отправка формы);
  • 404/500 — кастомная страница, не stack trace;
  • попытка открыть чужой объект по id — см. AuthZ.
Дисклеймер: это baseline gate, не пентест. Для денег, ПДн и B2B-аудита — нужен человек с чеклистом глубже.

После деплоя

Чеклист — до релиза. Мониторинг — когда продукт уже живёт: 502, SSL, диск, RAM.