AI-инструменты — Cursor, Claude Code, Codex — отлично выдают работающее приложение на экран за минуты. С безопасностью у них хуже. Они оптимизируют под «оно запускается», а не под «это безопасно выставлять в интернет». Результат — предсказуемый набор дыр, который снова и снова всплывает в AI-сгенерированных проектах.
Это чеклист ровно для такой ситуации: вы собрали (или навайбкодили) приложение AI-инструментом и хотите проверить его перед деплоем — или сразу после.
Почему AI-код утекает секретами
Три причины, и они складываются:
- Он пишет кратчайший рабочий путь. На запрос «вызови Stripe API» модель часто вставит ключ прямо в компонент — потому что так меньше всего шагов до работающего демо. Оно запускается. И заодно отдаёт ваш секрет каждому посетителю.
- Он доверяет дефолтам. Сборщики по умолчанию генерируют source maps и пропускают security headers, а AI редко переопределяет эти дефолты, если явно не попросить.
- Он не видит ваш деплой. Модель понятия не имеет, на Vercel вы, на VPS или за CDN — поэтому не может рассуждать о том, что реально открыто в продакшене.
Всё это не повод избегать AI-инструментов. Это повод проверять результат. Ниже — четыре проблемы, которые стоит проверить в первую очередь.
1. Захардкоженные API-ключи во фронтенде
Это самая частая утечка в AI-коде. Модель кладёт секретный ключ в React-компонент, клиентский fetch или переменную NEXT_PUBLIC_ — и вот он уже в бандле, который скачивает каждый посетитель.
Поищите в собранном выводе, прежде чем ему доверять:
grep -rE "sk_live_|AIza|ghp_|xoxb-|Bearer " dist .next/static build 2>/dev/null
# Любое совпадение — это утёкший секрет: ротируйте его и уносите на сервер
Если нашли — ротация ключа обязательна, считайте, что он уже скомпрометирован. Затем перенесите вызов в серверный route или server action, чтобы ключ никогда не попадал в браузер.
Полный фикс: /guides/api-key-leaks
2. Source maps по умолчанию в проде
Большинство AI-сгенерированных проектов собираются с включёнными source maps. Это значит, что ваше «скомпилированное» приложение всё равно отдаёт исходный код — имена компонентов, логику, комментарии — любому, кто откроет DevTools.
curl -I https://yourapp.com/_next/static/chunks/main.js.map
# 200 = ваш исходный код публичен. 404 = хорошо.
Полный фикс: /guides/source-maps-production
3. Отсутствующие security headers
AI редко добавляет Content-Security-Policy или HSTS без запроса. Без них приложение открыто для XSS-инъекций и clickjacking. Проверьте, что вы реально отдаёте:
curl -sI https://yourapp.com | grep -iE "content-security-policy|strict-transport-security|x-frame-options"
# Пустой вывод = security headers нет
Полный фикс: /guides/security-headers
4. Слабый или отсутствующий TLS
Если вы задеплоились на Vercel, Netlify или Cloudflare Pages — TLS настроен, этот пункт можно пропустить. Риск появляется, когда AI-инструмент поднимает вас на своём сервере или голом VPS и не настраивает HTTPS как следует — оставляя вас на истёкшем сертификате, несовпадении домена или чистом HTTP.
echo | openssl s_client -connect yourapp.com:443 -servername yourapp.com 2>/dev/null | openssl x509 -noout -dates
Полный фикс: /guides/tls-ssl
Заметки по инструментам и платформам
- Cursor / Claude Code / Codex — они редактируют ваш реальный репозиторий. Они с радостью вставят API-ключ прямо в код, чтобы фича заработала, — потому что это кратчайший путь к «оно запускается». Проверяйте любой дифф, который касается вызова API, fetch или env-переменной, перед тем как закоммитить.
- Ваш хостинг (Vercel / Netlify / Cloudflare) — TLS и HTTPS здесь автоматические, поэтому проблемы с TLS редки. Ваши реальные риски — утёкшие ключи и дефолтные source maps из сгенерированного кода. Security headers всё равно добавлять вам.
- Любой инструмент — переменные с префиксом
NEXT_PUBLIC_(илиVITE_,PUBLIC_) публичны по определению. Никогда не прячьте за ними секрет — неважно, какой ассистент написал эту строку.
Как проверить приложение за 30 секунд
Прогнать все команды выше руками можно, но долго. Быстрее: вставьте задеплоенный URL в vibeblame. Он сразу проверит утёкшие ключи, открытые source maps, отсутствующие заголовки, проблемы с TLS и пробелы в SEO — и сгенерирует готовый AI-промпт с описанием каждой проблемы под ваш стек, чтобы вы могли вернуть его прямо в Cursor или Claude и пофиксить за один заход.