Почему код с ИИ опаснее «медленного» джуна

Cursor, ChatGPT и Copilot ускоряют разработку в разы. Но скорость без владения diff — другая проблема: за вечер появляется функционал, который ты не сможешь объяснить на созвоне с заказчиком. Это не страшилка про «ИИ всё сломает» — это про реальные дыры, которые я вижу в pet-проектах, ботах и мелком SaaS.

1. Большой diff за один сеанс

Джун пишет медленно — и успевает заметить странное. ИИ выдаёт сразу контроллер, middleware, миграцию и три теста. Поверхность атаки растёт быстрее, чем твоё понимание «где тут граница доверия».

Не ок: мержить PR на 800+ строк, если ты можешь объяснить только «ну, оно работает локально».

2. Опасные дефолты из обучения модели

Модель любит «рабочие» примеры из туториалов:

  • DEBUG=True или APP_DEBUG=1 в конфиге
  • CORS «разрешить всем» (*)
  • SQL через конкатенацию строк «для простоты»
  • JWT без срока жизни или с секретом secret в репозитории
  • Админка без второго фактора «пока для MVP»

Локально всё зелёное. На проде — открытая дверь.

3. Секреты утекают в чат и в коммиты

Классика vibe-coding: вставил кусок .env в промпт «почини SMTP» — ключ уже в истории чата провайдера. Или модель «для удобства» положила API-ключ прямо в код.

# перед каждым пушем — минимум:
git diff --staged | grep -iE '(password|secret|api_key|token|BEGIN (RSA )?PRIVATE)'

Подробный чеклист — в 15 минут перед продом.

4. «Зелёные тесты» ≠ безопасность

ИИ часто генерирует тесты на happy path. Они не ловят:

  • доступ к чужому заказу по подмене id в URL;
  • эскалацию «обычный пользователь → админ»;
  • утечку полей в JSON-ответе API.

Unit-тесты прошли — продукт всё равно может быть дырявым. Про AuthZ отдельно: «чужой id».

5. Ложное спокойствие

«Модель же умная» — худший аргумент на ретроспективе после инцидента. ИИ не несёт ответственность перед заказчиком и регулятором. Несёшь ты.

Правило, которое реально работает

Не коммить то, что не объяснишь за две минуты — своими словами, без «ну там магия в middleware». Если не можешь — режь diff на части, разбирай по строкам, задавай модели вопрос «где тут дыра?» уже после того, как сам прочитал код.

6. Ритуал перед продом

Не нужен enterprise AppSec. Нужен повторяемый gate:

  1. 15 минут по чеклисту (секреты, зависимости, debug);
  2. ручная проверка «могу ли я увидеть чужие данные» — AuthZ;
  3. мониторинг и алерты, когда продукт уже в бою — чтобы не узнавать о падении от пользователя.

Когда код уже на сервере

Baseline кода не заменяет мониторинг: 502, диск, SSL, доступность сайта — Mediops шлёт алерт в Telegram или MAX до звонка клиента.