БЕЗОПАСНОСТЬ28 марта 202610 мин

Чеклист безопасности AI-кода: 20 пунктов перед деплоем

Практический чеклист безопасности для кода, написанного с помощью AI: от секретов и валидации до CORS, CSP и аудита зависимостей. Проверьте перед каждым деплоем.

Почему AI-код требует особого внимания к безопасности

AI-ассистенты генерируют код быстро, но не всегда безопасно. Модель оптимизирует на "работает", а не на "безопасно". Hardcoded API-ключи, отсутствие валидации, SQL-инъекции в сгенерированных запросах, CORS с wildcard — это реальные проблемы, которые встречаются в AI-сгенерированном коде. Не потому что AI плохой, а потому что безопасность — это отдельная экспертиза, которую нужно запрашивать явно.

Этот чеклист — 20 конкретных пунктов, которые нужно проверить перед каждым деплоем. Распечатайте его, добавьте в CLAUDE.md вашего проекта, сделайте обязательным шагом в CI/CD. Каждый пропущенный пункт — потенциальная уязвимость.

20
ПУНКТОВ
85%
УЯЗВИМОСТЕЙ ЛОВИТ
15 мин
НА ПРОВЕРКУ
0 ₸
СТОИМОСТЬ

Секреты и учётные данные

1. Нет hardcoded секретов в коде

Проверьте: API-ключи, токены, пароли, connection strings — всё должно быть в .env файлах или секретных переменных CI/CD. Ни одного секрета в исходном коде. Используйте git-secrets или truffleHog для автоматического сканирования. Если секрет когда-либо попал в git history — считайте его скомпрометированным и ротируйте.

2. .env файлы в .gitignore

Проверьте .gitignore: .env, .env.local, .env.production — все варианты должны быть исключены. Создайте .env.example с пустыми значениями для документации. Никогда не коммитьте .env.example с реальными значениями — даже "тестовыми".

3. Минимальные права для API-ключей

Каждый API-ключ должен иметь минимально необходимые права. Google Service Account — только те API, которые нужны. Supabase — anon key на клиенте, service_role только на сервере. AWS IAM — policy с конкретными действиями, не AdministratorAccess.

Правило: если ключ утечёт — какой максимальный ущерб? Если ответ "полный доступ ко всему" — права слишком широкие. Ограничьте до конкретных ресурсов и операций.

Валидация и санитизация входных данных

4. Все пользовательские данные валидируются на сервере

Клиентская валидация — для UX, серверная — для безопасности. Используйте Zod или Joi для определения схемы данных. Каждый API-эндпоинт и Server Action должен валидировать все входные данные. Никогда не доверяйте данным от клиента — даже если фронтенд "правильный", API можно вызвать напрямую.

5. Защита от SQL-инъекций

Используйте параметризованные запросы (prepared statements) — никогда не конкатенируйте пользовательский ввод в SQL-строку. Prisma, Drizzle и другие ORM делают это автоматически. Если пишете raw SQL — используйте $1, $2 плейсхолдеры. AI иногда генерирует string interpolation в SQL — это критическая уязвимость.

6. Защита от XSS

React и Next.js экранируют HTML по умолчанию — но только если вы не используете dangerouslySetInnerHTML. Если используете — санитизируйте через DOMPurify. Проверьте все места, где пользовательский контент отображается на странице: комментарии, профили, описания. Один пропущенный XSS — и злоумышленник крадёт сессии.

7. Защита от CSRF

Next.js Server Actions имеют встроенную CSRF-защиту через origin check. Для API Routes — добавьте проверку заголовка Origin или используйте CSRF-токены. Для форм — убедитесь, что форма отправляется только с вашего домена.

Аутентификация и авторизация

8. Пароли хешируются через bcrypt/argon2

Никогда не храните пароли в открытом виде. Используйте bcrypt с cost factor 12+ или Argon2id. Если используете Supabase Auth или NextAuth — они хешируют автоматически. Если кастомная авторизация — проверьте дважды.

9. JWT-токены с коротким TTL

Access token: 15 минут максимум. Refresh token: 7 дней. Никогда не храните JWT в localStorage — используйте httpOnly cookies. Проверяйте подпись токена на каждом запросе. Секрет для подписи JWT — минимум 256 бит, сгенерированный криптографически.

10. Авторизация на уровне ресурсов

Недостаточно проверить "пользователь авторизован". Нужно проверить "этот пользователь имеет право на этот ресурс". IDOR (Insecure Direct Object Reference) — одна из самых частых уязвимостей: пользователь меняет ID в URL и получает доступ к чужим данным. В каждом API-запросе проверяйте: принадлежит ли запрошенный ресурс текущему пользователю.

Тест на IDOR: авторизуйтесь как пользователь A, скопируйте URL с ID ресурса. Авторизуйтесь как пользователь B, вставьте URL. Если видите данные A — у вас IDOR. Supabase RLS решает это на уровне базы данных.

HTTP-безопасность

11. HTTPS обязателен

Весь трафик — только через HTTPS. Vercel, Cloudflare, Railway делают это автоматически. Если VPS — настройте SSL через Let's Encrypt с автообновлением. Добавьте Strict-Transport-Security заголовок для принудительного HTTPS.

12. CORS настроен корректно

Никогда Access-Control-Allow-Origin: *. Укажите конкретные домены. Для API, которые вызываются только с вашего фронтенда — разрешите только ваш домен. Для публичных API — ограничьте методы и заголовки.

13. Content Security Policy (CSP)

CSP заголовок ограничивает, откуда можно загружать скрипты, стили, изображения. Минимальная CSP: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'. Это блокирует инъекцию сторонних скриптов — основной вектор XSS-атак. Next.js поддерживает CSP через middleware или next.config.js headers.

14. Rate Limiting на API

Без rate limiting ваш API можно задосить или использовать для brute-force. Минимум: 100 запросов в минуту на IP для публичных эндпоинтов, 10 попыток входа в минуту. Используйте upstash/ratelimit или express-rate-limit. Для Next.js — middleware с Redis.

Обработка ошибок и логирование

15. Ошибки не раскрывают внутренности

В продакшене: пользователь видит "Произошла ошибка", а не stack trace с путями к файлам и SQL-запросами. Настройте кастомную страницу ошибки (error.tsx в Next.js). Детальные ошибки — только в логах, недоступных пользователю.

16. Логирование без секретов

Логируйте: кто (user_id), что (action), когда (timestamp), результат (success/error). Не логируйте: пароли, токены, номера карт, полные тела запросов с чувствительными данными. Маскируйте чувствительные поля: email → a***@gmail.com, token → sk-...xxxx.

Зависимости и инфраструктура

17. Аудит npm-зависимостей

Выполните npm audit перед каждым деплоем. Критические уязвимости — исправляйте немедленно. Используйте npm audit --production для проверки только продакшен-зависимостей. Настройте Dependabot или Renovate для автоматического обновления зависимостей.

18. Docker-образ без лишнего

Если используете Docker: multi-stage build, Alpine-образ, не копируйте node_modules из хоста (ставьте внутри контейнера), не запускайте от root (USER node). Не включайте .env, .git, tests в финальный образ — используйте .dockerignore.

19. Бэкапы базы данных

Автоматические бэкапы: ежедневно для PostgreSQL (pg_dump), еженедельно полный бэкап. Тестируйте восстановление из бэкапа хотя бы раз в месяц. Supabase делает бэкапы автоматически на платных планах. Для self-hosted — настройте cron + pg_dump + S3.

20. Мониторинг и алерты

Подключите мониторинг: Sentry для ошибок, UptimeRobot для доступности, логи для аномалий. Настройте алерты: 5xx ошибки больше порога, всплеск трафика (возможная DDoS), неудачные попытки входа (brute-force), изменения в критических файлах (tampering).

Автоматизируйте чеклист! Добавьте в CLAUDE.md вашего проекта правило: "Перед деплоем проверь все 20 пунктов безопасности". Claude Code будет выполнять проверку автоматически перед каждым коммитом или деплоем.

Сводная таблица приоритетов

P0
СЕКРЕТЫ + SQL INJ
P1
AUTH + IDOR + XSS
P2
CORS + CSP + RATE
P3
ЛОГИ + МОНИТОРИНГ

P0 — исправить до деплоя, без исключений. Утечка секретов или SQL-инъекция — это инцидент безопасности с первого дня. P1 — исправить в первую неделю. P2 — в первый месяц. P3 — настроить по мере развития проекта.

Как использовать этот чеклист

Безопасность — это не одноразовое действие, а привычка. Каждый коммит, каждый деплой, каждый новый эндпоинт — это момент, когда нужно пройтись по чеклисту. AI ускоряет разработку, но ответственность за безопасность остаётся за вами. 20 пунктов, 15 минут — и вы значительно снижаете риск инцидента.

// ЧИТАЙТЕ ТАКЖЕ
ТЕХНИЧЕСКИЙMCP (Model Context Protocol): полный гайд
15 мин
ТЕХНИЧЕСКИЙАрхитектура мульти-агентных систем
15 мин
ТЕХНИЧЕСКИЙNext.js + AI: веб-приложение с нуля
12 мин
Все статьи →
// КОГОРТА BRIQ.TEAM

Хочешь научиться создавать такое сам?

Когорта из 10 человек. 8 недель. 6 рабочих продуктов с AI. Менторство каждую неделю.

250 000 ₸
÷ Рассрочка от 20 833 ₸/мес
ИЛИ
НАПИСАТЬ В WHATSAPP