Публикация была переведена автоматически. Исходный язык: Русский
AI-кодинг (или «vibe-кодинг») стал новой нормой в разработке. Почти у каждого разработчика теперь есть под рукой умные ассистенты — Cursor, GitHub Copilot, Codeium, Cody, Amazon CodeWhisperer или встроенные LLM-агенты в IDE. Они действительно ускорили процесс, сделали кодинг проще и позволили каждому быстрее превращать идеи в работающие решения.
Но важно помнить: ИИ — не волшебник. Он учится на том, что видит, и вместе с гениальными идеями может унаследовать и чужие ошибки. Без надзора он способен притащить в проект небезопасные зависимости, антипаттерны и даже уязвимости.
Цель публикации — не запретить ИИ, а научить его работать по правилам безопасной разработки. Ведь ещё до появления ИИ-кодинга мы сталкивались с теми же проблемами: невалидными зависимостями, отсутствием валидации, небезопасной обработкой данных. Искусственный интеллект лишь ускорил этот цикл — и теперь ошибка может попасть в продакшн за секунды.
Ключевые технические риски: • ИИ предлагает корректный, но небезопасный код, игнорируя best practices. • Рекомендуемые пакеты могут содержать уязвимости или вредоносные зависимости. • Распространённые антипаттерны копируются в масштабных кодовых базах. • Security-ревью не успевают за скоростью генерации кода.
Поэтому мы создали эти Правила безопасной работы с AI-инструментами, чтобы помочь тебе и твоей команде использовать возможности ИИ осознанно: повышать продуктивность, сохраняя безопасность, качество и ответственность за результат.
Ниже — 10 правил[1], которым стоит придерживаться каждому разработчику, кто пишет с помощью AI.
1. Включайте приватные режимы AI-инструментов
Зачем: предотвращает утечки, исключает попадание кода в сторонние датасеты.
Зачем: предотвращает утечки, исключает попадание кода в сторонние датасеты.
2. Ограничивайте, какие файлы AI может читать
Не давайте ассистенту читать весь монорепозиторий, если для задачи нужны только два файла. Чем меньше область видимости модели, тем ниже риск утечки или неправильных выводов. Используйте игнор-файлы, чтобы скрыть от AI конфиги, .env, приватные модули, миграции, скрипты автоматизации, внутренние DevOps-настройки.
Зачем: ИИ не должен анализировать конфиденциальные модули, ключевые алгоритмы или внутренние API без необходимости. Для этого используйте механизмы исключения файлов.
👉 В Cursor для этого используется .cursorignore. В Copilot — repository-level policies. В Codeium и Cody — аналогичные ignore-списки.
Инструкции из раздела «Примеры инструкций TL;DR» из гайда OpenSSF — это базовый шаблон правил, который рекомендуется встраивать в контекст AI-кодеров (Cursor, Copilot, Codeium, Cody и т.д.), чтобы ИИ-ассистент генерировал безопасный код по умолчанию.
3. Контролируйте автокомплит и индексирование
Многие AI-платформы индексируют проект, создавая кеши, embeddings и структурные карты кода чтобы улучшить подсказки. Это может затрагивать приватные компоненты. Удобно, но не всегда безопасно для критичных модулей. Отключайте или ограничивайте его для чувствительных модулей.
Зачем: индексирование — это фактически передача структуры проекта наружу.
👉 В Cursor можно отключить Codebase Indexing, в Copilot — ограничить индексацию через enterprise-политику, в JetBrains AI — через настройки проекта.
4. Формулируйте безопасные промпты
Формулируйте подсказки, ориентированные на безопасность, которые с самого начала направляют ИИ к безопасным реализациям. Специфичность ваших подсказок напрямую влияет на безопасность генерируемого кода:
Вместо: «Создать функцию входа»
Применение: «Создайте безопасную функцию входа с правильным хешированием паролей, ограничением скорости и управлением сеансами в соответствии с рекомендациями OWASP».
Зачем: конкретика снижает риск появления уязвимостей.
Вот типичный пример того, как ИИ может создавать рабочие, но небезопасные конечные точки API
// → ИИ может сгенерировать рабочий, но небезопасный код, как этот пример:
app.get('/api/user/:id', (req, res) => {
const user = database.getUser(req.params.id);
res.json(user); // Exposes all user data
});
// → Безопасная версия с проверкой прав доступа и фильтрацией данных
app.get('/api/user/:id', authenticate, (req, res) => {
if (req.user.id !== req.params.id && !req.user.isAdmin) {
return res.status(403).json({error: 'Unauthorized'});
}
const user = database.getUser(req.params.id);
const safeUser = {
id: user.id,
name: user.name,
email: req.user.isAdmin ? user.email : undefined
};
res.json(safeUser);
});
5. Никогда не вставляйте секреты, ключи или токены в промпты
Это запрещено. Даже в приватном режиме. Зачем: промпт может сохраниться в логах, попасть в обработку у subprocessors или утечь через кеши.
6. Проверяйте любые предложенные зависимости
AI любит предлагать устаревшие, небезопасные или сомнительные пакеты. Зачем: чтобы не добавить в проект уязвимость уровня supply chain. Проверяйте пакеты через:
- npm audit
- pip audit
- osv.dev
- snyk
- dependabot alerts
7. Проверяйте все предложенные AI изменения вручную
AI сгенерировал код — вы отвечаете за его безопасность. Зачем: автоматическая генерация не освобождает от ревью. Обращайте внимание на рекомендации OWASP secure coding и OWASP Top 10:
- SQL-инъекции
- XSS
- небезопасную сериализацию
- логирование чувствительных данных
- отсутствие валидации
- неправильное обращение с авторизацией
8. В промптах важно указывать языковые особенности и требования безопасности, связанные с конкретным стеком
При работе с AI-ассистентом обязательно подчёркивайте специфику языка, фреймворка и сред разработки, которые используются в вашем проекте. Разные языки имеют разные модели памяти, типичные уязвимости и рекомендуемые защитные практики — и ИИ не всегда учитывает это по умолчанию.
Примеры:
- C/C++: просите использовать безопасные функции (например, strncpy, snprintf), включать проверки границ, избегать опасных вызовов вроде gets, неконтролируемого выделения памяти и небезопасной сериализации.
- Rust / Go: указывайте на необходимость проверки гонок (race detector), строгого контроля владения ресурсами, корректной обработки ошибок и безопасного использования каналов.
- JavaScript / Node.js: уточняйте защиту от XSS, безопасную обработку пользовательского ввода, изоляцию модулей и безопасные зависимости.
- Python: акцентируйте внимание на валидации входных данных, избегании eval, правильном использовании secrets вместо random.
Подробные примеры безопасных практик, специфичных для каждого языка программирования, можно найти в руководствах по secure coding и профессиональных чек-листах (например, Java SEI CERT, Open SSF).
9. Контролируйте и проверяйте плагины, расширения и интеграции IDE, включая Cursor Даже если сам AI-инструмент настроен безопасно, угрозой может стать расширение IDE. Недавний инцидент с вредоносным VSCode-плагином, установленным через Cursor IDE, привёл к краже криптовалюты на сумму более $500 000 — расширение маскировалось под легитимный модуль и устанавливало троян. Поэтому:
· устанавливайте расширения только из доверенных источников,
· проверяйте авторов,
· не используйте невалидированные плагины в рабочих проектах,
· держите IDE и плагины обновлёнными.
10. Учитывайте требования сферу работы вашего продукта разработки в каждом AI-промпте. Если работаете в секторе, где безопасность — не рекомендация, а обязательство, таке как медицинская компания, финтех-компания, ult должны строго соблюдать правила защиты данных, безопасного логирования, шифрования, аудита и хранения информации.
Поэтому при постановке задач AI-ассистенту важно прямо указывать, что генерируемый код должен
соответствовать отраслевым и нормативным требованиям:
защита от утечек, строгая валидация входных данных, безопасная обработка PII, соответствие DORA, GDPR, PCI DSS и внутренним
политикам компании.
Важно, чтобы каждая команда регулярно делилась знаниями и практиками безопасного AI-кодинга. Это включает в себя разбор типичных ошибок, демонстрацию небезопасных примеров, анализ инцидентов, совместное чтение рекомендаций по secure coding и обмен удачными промптами.
Особая ответственность лежит на TeamLead: он обязан обеспечить регулярное ревью и рефакторинг кода, созданного или модифицированного с помощью AI-ассистентов.
[1] Эти правила основаны на экспертном мнении и различных рекомендациях из литературы. Мы приветствуем обратную связь для улучшения этих рекомендаций.
AI-кодинг (или «vibe-кодинг») стал новой нормой в разработке. Почти у каждого разработчика теперь есть под рукой умные ассистенты — Cursor, GitHub Copilot, Codeium, Cody, Amazon CodeWhisperer или встроенные LLM-агенты в IDE. Они действительно ускорили процесс, сделали кодинг проще и позволили каждому быстрее превращать идеи в работающие решения.
Но важно помнить: ИИ — не волшебник. Он учится на том, что видит, и вместе с гениальными идеями может унаследовать и чужие ошибки. Без надзора он способен притащить в проект небезопасные зависимости, антипаттерны и даже уязвимости.
Цель публикации — не запретить ИИ, а научить его работать по правилам безопасной разработки. Ведь ещё до появления ИИ-кодинга мы сталкивались с теми же проблемами: невалидными зависимостями, отсутствием валидации, небезопасной обработкой данных. Искусственный интеллект лишь ускорил этот цикл — и теперь ошибка может попасть в продакшн за секунды.
Ключевые технические риски: • ИИ предлагает корректный, но небезопасный код, игнорируя best practices. • Рекомендуемые пакеты могут содержать уязвимости или вредоносные зависимости. • Распространённые антипаттерны копируются в масштабных кодовых базах. • Security-ревью не успевают за скоростью генерации кода.
Поэтому мы создали эти Правила безопасной работы с AI-инструментами, чтобы помочь тебе и твоей команде использовать возможности ИИ осознанно: повышать продуктивность, сохраняя безопасность, качество и ответственность за результат.
Ниже — 10 правил[1], которым стоит придерживаться каждому разработчику, кто пишет с помощью AI.
1. Включайте приватные режимы AI-инструментов
Зачем: предотвращает утечки, исключает попадание кода в сторонние датасеты.
Зачем: предотвращает утечки, исключает попадание кода в сторонние датасеты.
2. Ограничивайте, какие файлы AI может читать
Не давайте ассистенту читать весь монорепозиторий, если для задачи нужны только два файла. Чем меньше область видимости модели, тем ниже риск утечки или неправильных выводов. Используйте игнор-файлы, чтобы скрыть от AI конфиги, .env, приватные модули, миграции, скрипты автоматизации, внутренние DevOps-настройки.
Зачем: ИИ не должен анализировать конфиденциальные модули, ключевые алгоритмы или внутренние API без необходимости. Для этого используйте механизмы исключения файлов.
👉 В Cursor для этого используется .cursorignore. В Copilot — repository-level policies. В Codeium и Cody — аналогичные ignore-списки.
Инструкции из раздела «Примеры инструкций TL;DR» из гайда OpenSSF — это базовый шаблон правил, который рекомендуется встраивать в контекст AI-кодеров (Cursor, Copilot, Codeium, Cody и т.д.), чтобы ИИ-ассистент генерировал безопасный код по умолчанию.
3. Контролируйте автокомплит и индексирование
Многие AI-платформы индексируют проект, создавая кеши, embeddings и структурные карты кода чтобы улучшить подсказки. Это может затрагивать приватные компоненты. Удобно, но не всегда безопасно для критичных модулей. Отключайте или ограничивайте его для чувствительных модулей.
Зачем: индексирование — это фактически передача структуры проекта наружу.
👉 В Cursor можно отключить Codebase Indexing, в Copilot — ограничить индексацию через enterprise-политику, в JetBrains AI — через настройки проекта.
4. Формулируйте безопасные промпты
Формулируйте подсказки, ориентированные на безопасность, которые с самого начала направляют ИИ к безопасным реализациям. Специфичность ваших подсказок напрямую влияет на безопасность генерируемого кода:
Вместо: «Создать функцию входа»
Применение: «Создайте безопасную функцию входа с правильным хешированием паролей, ограничением скорости и управлением сеансами в соответствии с рекомендациями OWASP».
Зачем: конкретика снижает риск появления уязвимостей.
Вот типичный пример того, как ИИ может создавать рабочие, но небезопасные конечные точки API
// → ИИ может сгенерировать рабочий, но небезопасный код, как этот пример:
app.get('/api/user/:id', (req, res) => {
const user = database.getUser(req.params.id);
res.json(user); // Exposes all user data
});
// → Безопасная версия с проверкой прав доступа и фильтрацией данных
app.get('/api/user/:id', authenticate, (req, res) => {
if (req.user.id !== req.params.id && !req.user.isAdmin) {
return res.status(403).json({error: 'Unauthorized'});
}
const user = database.getUser(req.params.id);
const safeUser = {
id: user.id,
name: user.name,
email: req.user.isAdmin ? user.email : undefined
};
res.json(safeUser);
});
5. Никогда не вставляйте секреты, ключи или токены в промпты
Это запрещено. Даже в приватном режиме. Зачем: промпт может сохраниться в логах, попасть в обработку у subprocessors или утечь через кеши.
6. Проверяйте любые предложенные зависимости
AI любит предлагать устаревшие, небезопасные или сомнительные пакеты. Зачем: чтобы не добавить в проект уязвимость уровня supply chain. Проверяйте пакеты через:
- npm audit
- pip audit
- osv.dev
- snyk
- dependabot alerts
7. Проверяйте все предложенные AI изменения вручную
AI сгенерировал код — вы отвечаете за его безопасность. Зачем: автоматическая генерация не освобождает от ревью. Обращайте внимание на рекомендации OWASP secure coding и OWASP Top 10:
- SQL-инъекции
- XSS
- небезопасную сериализацию
- логирование чувствительных данных
- отсутствие валидации
- неправильное обращение с авторизацией
8. В промптах важно указывать языковые особенности и требования безопасности, связанные с конкретным стеком
При работе с AI-ассистентом обязательно подчёркивайте специфику языка, фреймворка и сред разработки, которые используются в вашем проекте. Разные языки имеют разные модели памяти, типичные уязвимости и рекомендуемые защитные практики — и ИИ не всегда учитывает это по умолчанию.
Примеры:
- C/C++: просите использовать безопасные функции (например, strncpy, snprintf), включать проверки границ, избегать опасных вызовов вроде gets, неконтролируемого выделения памяти и небезопасной сериализации.
- Rust / Go: указывайте на необходимость проверки гонок (race detector), строгого контроля владения ресурсами, корректной обработки ошибок и безопасного использования каналов.
- JavaScript / Node.js: уточняйте защиту от XSS, безопасную обработку пользовательского ввода, изоляцию модулей и безопасные зависимости.
- Python: акцентируйте внимание на валидации входных данных, избегании eval, правильном использовании secrets вместо random.
Подробные примеры безопасных практик, специфичных для каждого языка программирования, можно найти в руководствах по secure coding и профессиональных чек-листах (например, Java SEI CERT, Open SSF).
9. Контролируйте и проверяйте плагины, расширения и интеграции IDE, включая Cursor Даже если сам AI-инструмент настроен безопасно, угрозой может стать расширение IDE. Недавний инцидент с вредоносным VSCode-плагином, установленным через Cursor IDE, привёл к краже криптовалюты на сумму более $500 000 — расширение маскировалось под легитимный модуль и устанавливало троян. Поэтому:
· устанавливайте расширения только из доверенных источников,
· проверяйте авторов,
· не используйте невалидированные плагины в рабочих проектах,
· держите IDE и плагины обновлёнными.
10. Учитывайте требования сферу работы вашего продукта разработки в каждом AI-промпте. Если работаете в секторе, где безопасность — не рекомендация, а обязательство, таке как медицинская компания, финтех-компания, ult должны строго соблюдать правила защиты данных, безопасного логирования, шифрования, аудита и хранения информации.
Поэтому при постановке задач AI-ассистенту важно прямо указывать, что генерируемый код должен
соответствовать отраслевым и нормативным требованиям:
защита от утечек, строгая валидация входных данных, безопасная обработка PII, соответствие DORA, GDPR, PCI DSS и внутренним
политикам компании.
Важно, чтобы каждая команда регулярно делилась знаниями и практиками безопасного AI-кодинга. Это включает в себя разбор типичных ошибок, демонстрацию небезопасных примеров, анализ инцидентов, совместное чтение рекомендаций по secure coding и обмен удачными промптами.
Особая ответственность лежит на TeamLead: он обязан обеспечить регулярное ревью и рефакторинг кода, созданного или модифицированного с помощью AI-ассистентов.
[1] Эти правила основаны на экспертном мнении и различных рекомендациях из литературы. Мы приветствуем обратную связь для улучшения этих рекомендаций.