Собрали приложение за выходные. ИИ написал большую часть кода, вы запушили в GitHub и показали друзьям. Интерфейс блестит, а в истории коммитов лежит API-ключ, который ИИ подставил в конфиг, чтобы код сразу заработал.
Git устроен как машина времени: он помнит каждую версию каждого файла. Удаление файла или ключа ничем не помогает — старые коммиты остаются.
Почему удаление не решает проблему
Когда вы пушите коммит, он навсегда остаётся в истории репозитория. Потом вы перенесли ключ в переменную окружения, удалили файл, запушили новый коммит — но старый всё ещё там.
Любой, кто клонирует репозиторий, получает всю историю целиком. Автоматические сканеры публичных репозиториев ищут именно такие паттерны. Ключ, утёкший полгода назад, остаётся рабочим, если вы его не отозвали.
Приватный репозиторий — не защита. Скомпрометированный аккаунт, случайная смена видимости, уволенный подрядчик с доступом — и приватная история превращается в утечку.
Что делает ИИ-ассистент
Кодинг-ассистент пишет работающий код. Он заполняет значения, чтобы код выполнился в вашей сессии. Иногда эти значения попадают в коммиты.
ИИ не совершает ошибку безопасности. Он делает то, что вы попросили: чтобы работало. Решение о безопасности остаётся за вами — и принять его нужно до пуша в общую инфраструктуру.
Разрыв не в инструментах. Это старая разница между «код запускается» и «код безопасно выпускать». ИИ просто ускоряет первую часть — и разрыв становится заметнее.
Что чаще всего оседает в истории
- API-ключи и токены в конфигах, даже если потом вы переехали на переменные окружения.
- Файлы .env, закоммиченные до добавления в .gitignore.
- Строки подключения к базе данных из ранней разработки.
- Сервисные аккаунты, захардкоженные в serverless-функциях.
Грубая ручная проверка выглядит так: git log -p | grep -iE "api_key|secret|password|token|sk-|AKIA". Но так вы найдёте только очевидное.
Проверка перед запуском
Прежде чем подключать репозиторий, созданный ИИ, к реальной инфраструктуре или делать его публичным:
- Просканируйте всю историю git, а не только текущие файлы. Каждый коммит.
- Отзовите все найденные ключи, даже если они выглядят просроченными или тестовыми.
- Если историю нужно полностью очистить, git filter-repo — современная замена git filter-branch — перепишет коммиты и вырежет секрет из исходной точки.
Для рутины есть сервисы, которые сканируют историю по URL репозитория, но суть одна: проверка должна случиться до того, как станет поздно.
| Что утекает | Как искать |
|---|---|
| API-ключи в конфигах | grep по строкам api_key, token, secret |
| .env файлы | git log --all -- .env |
| Строки подключения к БД | по mongodb://, postgres:// и т.п. |
| Сервисные аккаунты | по private_key, service_account |
Вопрос не в том, несут ли ИИ-инструменты риски. Любой инструмент, ускоряющий разработку, обгоняет мысленный процесс проверки безопасности. Вопрос в том, есть ли у вас проверка, которая срабатывает до того, как это станет проблемой.
Полное сканирование git-истории занимает несколько минут. Оно должно стоять перед пушем в прод, а не после первого инцидента.
Комментарии (0)
Войдите, чтобы комментировать.
Пока нет комментариев. Будьте первым.