Чеклист перед продом: 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.
После деплоя
Чеклист — до релиза. Мониторинг — когда продукт уже живёт: 502, SSL, диск, RAM.