ИИ-ассистенты стали нормой: Copilot, ChatGPT, Claude пишут код прямо в IDE, тянут зависимости, предлагают архитектуру. Скорость выросла — а вместе с ней выросли и скрытые риски, которые обнаруживаются только в продакшене.
Вот 3 главных риска AI-кода, подтверждённых исследованиями 2025–2026 годов, и 1 стратегия, которая превращает ИИ из угрозы в инструмент.
Содержание
Риск 1 — скрытые уязвимости, которые проходят тесты
Цифра: 45% AI-сгенерированного кода содержат уязвимости из списка OWASP Top 10. При этом 99,9% кода проходит синтаксическую проверку — он выглядит правильно, компилируется и запускается.

Кейс: SQL-инъекция в API-обработчике
ИИ генерирует endpoint для поиска пользователей. Код выглядит чисто, проходит ревью и деплоится.
# ❌ Что генерирует ИИ (уязвимо)
from flask import Flask, request
import sqlite3
app = Flask(__name__)
@app.route("/users")
def get_user():
username = request.args.get("name", "")
conn = sqlite3.connect("app.db")
cursor = conn.cursor()
query = f"SELECT * FROM users WHERE username = '{username}'"
cursor.execute(query) # SQL-инъекция!
return {"users": cursor.fetchall()}
Проблема: f-строка подставляет
usernameпрямо в SQL-запрос. Злоумышленник передаётname=' OR '1'='1и получает всю таблицу.
# ✅ Как правильно
@app.route("/users")
def get_user():
username = request.args.get("name", "")
conn = sqlite3.connect("app.db")
cursor = conn.cursor()
cursor.execute(
"SELECT * FROM users WHERE username = ?",
(username,) # параметризованный запрос
)
return {"users": cursor.fetchall()}
Почему это системная проблема
Исследование Veracode протестировало более 100 LLM на 80 задачах. Результаты по классам уязвимостей:
| Класс уязвимости | Код прошёл проверку | Код не прошёл |
| Небезопасная криптография (CWE-327) | 86,7% | 13,3% |
| SQL-инъекция (CWE-89) | 82,5% | 17,5% |
| XSS (CWE-80) | 15,4% | 84,6% |
| Log injection (CWE-117) | 12,4% | 87,6% |
ИИ почти всегда проваливает XSS и log injection, потому что обучался на коде без современных стандартов безопасности. Большие модели не показали значимого улучшения по security-метрикам.
Риск 2 — галлюцинированные пакеты и атаки на supply chain
Цифра: до 30% пакетов, которые предлагает ChatGPT, не существуют на PyPI. 43–58% галлюцинированных имён повторяются между запросами — это предсказуемо и эксплуатируемо.

Как это работает
- ИИ генерирует код с
import asyncio_helpers(пакет не существует) - Злоумышленник регистрирует
asyncio_helpersна PyPI с вредоносным payload - Разработчик запускает
pip install asyncio_helpers— Malware в проекте - Payload ищет SSH-ключи, AWS/GCP/Azure токены, GitHub credentials в 100+ hardcoded paths
В мае 2026 года атака Mini Shai-Hulud скомпрометировала сотни пакетов в npm и PyPI, включая TanStack (220+ млн загрузок в месяц), Mistral AI SDK и LiteLLM.
Защита
# ❌ Что делает разработчик (опасно)
import subprocess
subprocess.run(["pip", "install", "asyncio_helpers"]) # пакет не существует!
# ✅ Правильный подход
# 1. Проверить пакет на PyPI перед установкой
# 2. Использовать pip-audit для сканирования зависимостей
# 3. Закреплять версии в lock-файле с хешами
bash
# CI-gate: блокировка уязвимых зависимостей
pip-audit --requirement requirements.txt --strict
# Сканер secrets: перехват токенов до коммита
bandit -r src/ -f json -o bandit-report.json
Правило: каждый новый
importот ИИ — это непроверенный ввод. Проверяйте пакет на PyPI перед установкой, закрепляйте версию в lock-файле, запускайтеpip-auditв CI.
Риск 3 — «ложная уверенность» и потеря экспертизы
Цифра: Stanford study показал, что разработчики с AI-ассистентами пишут менее безопасный код, но оценивают его как более безопасный, чем код без ИИ. Это «эффект ложной уверенности» — самый опасный паттерн в AI-разработке.
Дополнительно: METR trial 2025 года обнаружил, что опытные разработчики с AI-инструментами работали на 19% медленнее, но были уверены, что работают на 20% быстрее.

Кейс: энтерпрайз-архитектура для простой задачи
ИИ предлагает «полноценное решение» с абстрактными классами, фабриками и dependency injection для функции, которая парсит CSV и считает среднее.
# ❌ Что генерирует ИИ (overengineering)
from abc import ABC, abstractmethod
from typing import Protocol
from dataclasses import dataclass
class DataReader(Protocol):
def read(self, path: str) -> list[dict]: ...
class DataProcessor(ABC):
@abstractmethod
def process(self, data: list[dict]) -> float: ...
class CSVReader:
def read(self, path: str) -> list[dict]:
import csv
with open(path) as f:
return list(csv.DictReader(f))
class MeanProcessor(DataProcessor):
def process(self, data: list[dict]) -> float:
values = [float(row["price"]) for row in data]
return sum(values) / len(values)
class DataPipeline:
def __init__(self, reader: DataReader, processor: DataProcessor):
self.reader = reader
self.processor = processor
def run(self, path: str) -> float:
data = self.reader.read(path)
return self.processor.process(data)
# Использование
pipeline = DataPipeline(CSVReader(), MeanProcessor())
result = pipeline.run("data.csv")
python
# ✅ Что нужно было (5 строк)
import csv
from statistics import mean
with open("data.csv") as f:
prices = [float(row["price"]) for row in csv.DictReader(f)]
result = mean(prices)
ИИ не понимает контекст задачи — он угадывает правдоподобную структуру кода. Результат: легаси, который невозможно поддерживать, потому что никто не понимает, зачем тут 4 класса для чтения CSV.
Чем это грозит мидлу
- Репутация: на ревью коллеги видят «работающий код, но не понимают, почему так»
- Технический долг: 75% техлидов столкнутся с умеренным или сильным техдолгом из-за AI-практик к 2026 году
- Риск для карьеры: мидл превращается в «оператора ИИ» — человека, который копирует код от нейросети и не понимает его. Это снижает ценность как инженера и архитектора
Стратегия «AI как наставник»: 4 принципа
Стратегия проста: ИИ — ревьюер, а не автор. Не «напиши мне сервис», а «разбери мой код и найди проблемы».

Принцип 1: ИИ — ревьюер, а не автор
Просите ИИ разобрать существующий код, а не писать с нуля. Это сохраняет контроль над архитектурой и заставляет думать.
# Промпт-шаблон для ревью:
"""
Проанализируй этот Python-код и найди:
1. Уязвимости безопасности (SQL injection, XSS, eval)
2. Проблемы производительности (N+1 запросы, O(n²) в циклах)
3. Необработанные edge cases (None, пустой список, отрицательные значения)
4. Нарушения PEP 8 и type hints
Код:
{твой код}
Формат ответа: список проблем с приоритетом (critical/high/low)
и предложением фикса.
"""
Принцип 2: узкие промпты с контекстом
Чем точнее контекст, тем меньше галлюцинаций. Указывайте версию Python, библиотеки, ограничения.
# ❌ Плохой промпт
"Напиши API для обработки заказов"
# ✅ Хороший промпт
"""
Python 3.11, FastAPI 0.104, SQLAlchemy 2.0, async.
Напиши endpoint POST /orders, который:
- принимает JSON с полями: items: list[OrderItem], customer_id: int
- проверяет наличие customer_id в БД (async session)
- создаёт заказ в БД
- возвращает 201 с order_id
- обрабатывает: customer not found → 404, empty items → 422
НЕ меняй сигнатуры существующих функций.
Добавь pytest-тесты для: пустого списка, несуществующего customer_id,
успешного создания.
"""
Принцип 3: разбивать задачу на шаги
Не «напиши сервис», а «сначала модели, потом маршруты, потом тесты». Это ловит scope drift до того, как ИИ наворотит лишнего.
# Шаг 1: план
"Перечисли файлы, которые нужно изменить, и объясни почему."
# Проверяем план. Если ИИ предлагает трогать unrelated модули — останавливаем.
# Шаг 2: код
"Теперь сгенерируй изменения кода и тесты."
# Проверяем diff. Если что-то не так — правим вручную.
# Шаг 3: ревью
"Проверь сгенерированный код на:
- типы данных (mypy --strict)
- безопасность (bandit -r)
- edge cases (пустой ввод, None, отрицательные значения)"
Принцип 4: всегда проверять — типы, тесты, логи, безопасность
AI-код проходит синтаксическую проверку в 99,9% случаев — именно поэтому небезопасный код проходит ревью. Линтеры и SAST-сканеры — единственный надёжный барьер.
# Минимальный набор проверок для AI-генерированного PR
ruff check --fix src/ # линтер + форматтер
mypy --strict src/ # проверка типов
bandit -r src/ # SAST-сканер безопасности
pip-audit --requirement requirements.txt # уязвимые зависимости
pytest --cov=src --cov-fail-under=80 # тесты + покрытие
Чек-лист проверки AI-кода
Краткая версия. Полная — в гайде.
- Каждый новый
importпроверен на PyPI (пакет существует, не заброшен) - Нет
eval(),exec(),pickle.load()для пользовательских данных - SQL-запросы параметризованы (
?, не f-строки) - Пароли хешируются через
bcrypt/argon2, неhash()илиmd5 - Нет
verify=Falseв HTTP-клиентах (requests,httpx) - API-эндпоинты проверяют авторизацию (не только аутентификацию)
banditиpip-auditпроходят без critical/high- Тесты покрывают edge cases: пустой ввод,
None, отрицательные значения - Покрытие тестов ≥ 80% для изменённых файлов
- В коммите указано, что код сгенерирован ИИ (например,
Assisted-by:тег)

Как внедрить AI-практики в команду без хаоса
Процессы
- Disclosure в коммитах. Linux kernel уже требует тег
Assisted-by:для AI-генерированного кода. Человек, отправивший PR, несёт полную ответственность. - AI-код проходит тот же ревью, что и человеческий. Никаких «ИИ написал, значит проверено». Вес ревью увеличивается — в AI-assisted PR в среднем на 4 проблемы больше, чем в человеческом.
- Branch-first generation. Создавай отдельную ветку для каждого промпта. Генерируй код только там. Проверяй diff как обычный PR.
Инструменты
| Инструмент | Что делает | Когда использовать |
ruff | Линтер + форматтер, 800+ правил, заменяет flake8 + isort + black | Всегда — в pre-commit и CI |
mypy --strict | Статическая типизация, ловит AttributeError до запуска | Для всех изменённых файлов |
bandit | SAST-сканер для Python, ищет eval(), pickle, слабую криптографию | Для каждого AI-сгенерированного diff |
pip-audit | Проверка зависимостей на CVE | В CI, блокирует merge при HIGH/CRITICAL |
| CodeRabbit / Sourcery | AI-ревьюер на уровне PR, понимает семантику кода | Как первая линия ревью перед человеком |
Часто задаваемые вопросы — FAQ
Можно ли доверять ИИ в критичных частях системы?
Нет. Исследование IEEE-ISTAS 2025 показало: каждые 5 итераций LLM-генерации без human review увеличивают количество critical vulnerabilities на 37,6%. Для аутентификации, авторизации, криптографии и работы с PII — только ручной код с обязательным security review.
Что делать, если AI-код работает, но ты не понимаешь почему?
Не мерджить. Если ты не можешь объяснить каждую строку на ревью — код не готов к продакшену. Попроси ИИ объяснить логику, разбей на части, напиши тесты, которые проверяют каждый шаг. Если после этого всё ещё непонятно — перепиши вручную.
Когда НЕ использовать ИИ для кода?
- Аутентификация и авторизация (IDOR, access control)
- Криптография (хеширование, шифрование, TLS)
- CI/CD pipeline и инфраструктурные файлы (Dockerfile, GitHub Actions)
- Обработка PII и финансовых данных
- Логика доступа между tenant’ами в multi-tenant системах
Как ИИ влияет на скорость разработки?
Парадокс: METR trial 2025 года обнаружил, что опытные разработчики с AI-инструментами работали на 19% медленнее, но были уверены, что работают на 20% быстрее. ИИ ускоряет написание boilerplate на 60–80%, но время, сэкономленное на написании, тратится на аудит и отладку.
Нужно ли запрещать ИИ в команде?
Нет, нужно выстроить процесс. Запретpushит разработчиков в тень — они будут использовать ИИ без disclosure. Лучше: разрешить с правилами — disclosure в коммитах, обязательный SAST, branch-first generation, weight review на high-failure классы (XSS, log injection, SQL injection, deserialization).
Что дальше: не станьте оператором ИИ
ИИ — мощный инструмент, но он не заменяет инженерное мышление. Разница между «мидлом, которого заменят» и «мидлом, которого ценят» — в том, кто контролирует код: ты или нейросеть.
🧠 «Как ИИ разрушает твой код (и карьеру), и как превратить его в своего лучшего наставника» — гайд с разбором рисков, стратегией «AI как наставник» и чек-листами, которые защищают репутацию и проект.
🤖 «Хватит чинить код от нейросети: гайд, как получать рабочий Python-код с первого раза» — чек-листы, готовые промпты и разбор реальных ошибок. Чтобы не тратить часы на фиксы и не деплоить уязвимости.
Статьи по теме
- Как ИИ разрушает твой код и карьеру — и как превратить его в наставника: разбор реальных кейсов

- 5 типовых ошибок в строковых методах Python: как не терять время на ревью и фиксы

- Ошибки новичков Python: 5 частых граблей в первую неделю

- ActionChains в Python: мощный инструмент для управления браузером и симуляции действий пользователя

- Клик по координатам на Python: Полное руководство по автоматизации кликов мыши

- Автоматизируйте рутину: написание программы Python вход на сайт за 30 минут!

- Поиск элемента в JavaScript и Python: Секреты быстрого нахождения в массивах и списках

- Python: суперсила для разработчиков — какие задачи можно удобно/эффективно решать с ним прямо сейчас?


Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.