FixVibe

// docs / security guides / cursor checklist

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

Строим с Cursor? Функции автозаполнения Cursor, режим Composer и агента исключительно эффективны и создают предсказуемые слепые зоны безопасности. Этот контрольный список ориентирован на шаблоны, специфичные для Cursor: встраивание ключей сервисной роли, целые файлы, созданные Composer без проверки, команды терминала в режиме агента и файл <code>.cursorrules</code> в качестве первого средства защиты. 28 элементов по секретам, базе данных, аутентификации, заголовкам, развертыванию и ошибкам, специфичным для Cursor.

PRE = предварительное развертывание (проверка источника). DEPLOY = во время развертывания. POST = проверка после развертывания. Ссылка на элементы FixVibe, проверьте идентификаторы в форме category.check-id, где это необходимо.

Секреты и ключи API (5 шт.)

Автозаполнение Cursor обучено на открытом исходном коде, где секреты являются общими. Модель предлагает их свободно, особенно после неудачной попытки авторизации.

  1. PRE — Write security rules into .cursorrules. Добавьте строку: «Никогда не встраивайте SUPABASE_SERVICE_ROLE_KEY, sk_live_* или любую переменную окружения, начинающуюся с аббревиатуры поставщика, в клиентский код. Всегда используйте импорт только на сервере». Cursor читает .cursorrules и учитывает это в каждом предложении.
  2. PRE — Audit Composer-generated files. Когда Composer Cursor создаст целый файл (особенно обработчики аутентификации), просмотрите его построчно. Composer иногда встраивает переменные env, которые должны оставаться только на сервере. Ищите NEXT_PUBLIC_ или прямые ссылки на служебные ключи в импорте компонентов.
  3. PRE — Reject auto-imports of service clients into client components. Если Composer импортирует import { supabase } from '@/lib/supabase/service' в файл React, немедленно удалите его и направьте вместо этого через конечную точку API. Импорт только для сервера помечен явно — не пропускайте его.
  4. PRE — Scan Agent-mode commits. В режиме агента выполняются команды терминала и возможна непосредственная фиксация. Проведите аудит git log --oneline -20 и git diff HEAD~5, чтобы убедиться, что во время работы агента не было зафиксировано никаких секретных строк.
  5. POST — Run secrets.browser-storage. Пассивная проверка развернутого URL. Если в пакете JS появится служебный ключ, немедленно поверните его — вероятно, автозаполнение Cursor встроило его.

Контроль доступа к базе данных (4 шт.)

Composer часто генерирует рабочий код авторизации, но пропускает RLS — момент «это работает» не позволяет людям заметить отсутствие применения политики.

  1. PRE — Force Cursor to generate migrations with RLS. В .cursorrules: «Каждая миграция CREATE TABLE public.* должна включать ALTER TABLE ... ENABLE ROW LEVEL SECURITY и FORCE ROW LEVEL SECURITY». Затем попросите Composer сгенерировать миграцию.
  2. PRE — Review Composer-generated policies. Composer иногда пишет политики без проверки auth.uid(). Такие политики, как allow select on public.items без пункта using, опасно широки. Требуйте соответствия user_id.
  3. DEPLOY — Confirm FORCE ROW LEVEL SECURITY is live. Откройте Supabase Studio, проверьте переключатель RLS каждой таблицы. Если миграция Composer имела ENABLE, но забыла FORCE, владельцы таблиц (ваши миграции) обходят RLS. Это настоящий пробел.
  4. POST — Run the baas.supabase-rls active check. Он пытается выполнить запись с помощью кнопки «Анон». Если это удастся, RLS на самом деле не обеспечивает принудительного исполнения — вероятно, отсутствует ключевое слово FORCE.

Аутентификация и сеансы (4 шт.)

Cursor быстро генерирует потоки аутентификации, но часто упускает из виду тонкую проверку на стороне сервера, которая обеспечивает безопасность токенов.

  1. PRE — Ensure all auth routes use getUser(). Найдите getSession() в маршрутах API и замените на await supabase.auth.getUser(). getSession() считывает непроверенный файл cookie; getUser() проверяет с помощью Supabase бэкенд.
  2. PRE — Check Composer auth handlers for token expiry. Для токенов Magic-link необходима поддержка expires_at на сервере. По умолчанию Supabase составляет 1 час — не просите Cursor отменить его без реальной причины.
  3. PRE — Audit the sign-in redirect guard. Перенаправление параметра запроса next после входа в систему должно быть проверено: должно начинаться с /, а не //. Композитор иногда пропускает это. Добавьте его вручную, если он отсутствует.
  4. POST — Test logout server-side state destruction. Войдите, выйдите из системы, проверьте файлы cookie (Инструменты разработчика → Приложение → Файлы cookie). Файл cookie сеанса должен быть немедленно удален. Если оно сохраняется, обработчик выхода из системы не уничтожает состояние.

HTTP заголовки безопасности и CSP (3 элемента)

Cursor по умолчанию редко генерирует промежуточное программное обеспечение. Если вы не спросите явно, CSP и HSTS обычно там нет.

  1. PRE — Demand CSP in .cursorrules. Добавьте: «Сгенерируйте src/middleware.ts с помощью Content-Security-Policy. Используйте nonce для script-src, а не unsafe-inline». Затем попросите Cursor сгенерировать его. Без этой подсказки промежуточное программное обеспечение пропускается.
  2. PRE — Verify src/middleware.ts exists. При структуре каталога src/ Next.js получает только src/middleware.ts. Корневой уровень middleware.ts игнорируется. Если CSP не приземляется, убедитесь, что файл находится в правильном месте.
  3. POST — Run headers.security-headers. В отчетах о пассивном сканировании отсутствуют CSP, HSTS, X-Frame-Options, X-Content-Type-Options. Откройте отчет и следуйте инструкциям по исправлению для вашей платформы развертывания.

Гигиена развертывания (5 пунктов)

Приложения Cursor часто попадают на Vercel, который имеет хорошие настройки по умолчанию, но требует явного усиления границы build/deploy.

  1. DEPLOY — Check Vercel env-var scoping. Настройки → Переменные среды → каждый секрет должен быть ограничен только Production. Никогда не делитесь sk_live_* с предварительной версией или разработкой.
  2. DEPLOY — Disable build-log secret echo. Если ваш рабочий процесс действий vercel.json или GitHub имеет echo $SECRET, удалите его. Журналы сборки архивируются публично; секреты в журналах скомпрометированы.
  3. DEPLOY — Use Vercel's managed secrets, not inline workflow vars. Vercel Настройки → Переменные среды шифруются в неактивном состоянии. GitHub Секреты действий лучше, чем ничего, но они предназначены для CI, а не для интеграции платформы развертывания.
  4. POST — Verify CSP nonce on the deployed preview. Откройте ссылку Vercel предварительного просмотра в браузере, откройте DevTools → Сеть → корневой ответ HTML. Заголовок CSP должен присутствовать и включать 'strict-dynamic' с уникальным одноразовым номером для каждого запроса.
  5. POST — Rotate any key that ever shipped, even to Preview. Если ключ попал в производственный комплект хотя бы за 10 минут, он скомпрометирован. Немедленно поверните.

Cursor-специфичные ошибки (4 пункта)

Шаблоны, уникальные для рабочего процесса Cursor, которые создают угрозы безопасности:

  1. Agent mode auto-fixes propagate old patterns. Если вы попросите агента «исправить ошибки аутентификации», он может повторно создать один и тот же файл аутентификации несколько раз, каждый раз встраивая один и тот же служебный ключ, если он находится в контексте кодовой базы. Сначала очистите оригинал, а затем попросите агента исправить его.
  2. Индексирование Cursor Index leaks intent. Cursor @codebase является мощным инструментом, но если ваш каталог .cursor когда-либо будет раскрыт (неправильно настроен S3, история git), индекс покажет вашу архитектуру и секретные шаблоны. Держите .cursor локальным.
  3. Composer mode loses context between files. Каждый файл, создаваемый Composer, является свежим. Если вы попросите его сгенерировать файл клиента, а затем маршрут API, они могут использовать разные конфигурации клиента Supabase. Просмотрите оба и убедитесь, что они соответствуют вашей архитектуре.
  4. Autocomplete bias toward "working" over "secure". Cursor предлагает самый быстрый код, который передает ваш текущий контекст. Если в вашем тесте есть NEXT_PUBLIC_SERVICE_KEY, автозаполнение запоминает его и предлагает повторно. Очистите тестовые приспособления, прежде чем делиться кодом с моделью.

Следующие шаги

После того как вы зафиксировали шаблоны, специфичные для Cursor, перекрестно проверьте general vibe coding security checklist (44 элемента), а затем step-by-step hardening. Также смотрите Claude Code checklist, если вы смешиваете инструменты.

// scan your app

Хватит читать. Найдите бреши в своём приложении.

Добавьте URL — FixVibe выполнит все пассивные проверки из этого руководства, а также более 200 других менее чем за минуту. Free, ни установки, ни карты.

  • Free уровень — 3 скана/месяц, без карты.
  • Пассивное сканирование любых URL — проверка домена не требуется.
  • Настроен на Cursor, Claude Code, Lovable, Bolt, v0, Replit.
  • Coding-agent prompts for code/config findings, plus operator steps for DNS/provider fixes.
Чек-лист безопасности Cursor: 28 пунктов перед запуском — Docs · FixVibe