// 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 обучено на открытом исходном коде, где секреты являются общими. Модель предлагает их свободно, особенно после неудачной попытки авторизации.
- PRE — Write security rules into
.cursorrules. Добавьте строку: «Никогда не встраивайтеSUPABASE_SERVICE_ROLE_KEY,sk_live_*или любую переменную окружения, начинающуюся с аббревиатуры поставщика, в клиентский код. Всегда используйте импорт только на сервере». Cursor читает.cursorrulesи учитывает это в каждом предложении. - PRE — Audit Composer-generated files. Когда Composer Cursor создаст целый файл (особенно обработчики аутентификации), просмотрите его построчно. Composer иногда встраивает переменные env, которые должны оставаться только на сервере. Ищите
NEXT_PUBLIC_или прямые ссылки на служебные ключи в импорте компонентов. - PRE — Reject auto-imports of service clients into client components. Если Composer импортирует
import { supabase } from '@/lib/supabase/service'в файл React, немедленно удалите его и направьте вместо этого через конечную точку API. Импорт только для сервера помечен явно — не пропускайте его. - PRE — Scan Agent-mode commits. В режиме агента выполняются команды терминала и возможна непосредственная фиксация. Проведите аудит
git log --oneline -20иgit diff HEAD~5, чтобы убедиться, что во время работы агента не было зафиксировано никаких секретных строк. - POST — Run secrets.browser-storage. Пассивная проверка развернутого URL. Если в пакете JS появится служебный ключ, немедленно поверните его — вероятно, автозаполнение Cursor встроило его.
Контроль доступа к базе данных (4 шт.)
Composer часто генерирует рабочий код авторизации, но пропускает RLS — момент «это работает» не позволяет людям заметить отсутствие применения политики.
- PRE — Force Cursor to generate migrations with RLS. В
.cursorrules: «Каждая миграцияCREATE TABLE public.*должна включатьALTER TABLE ... ENABLE ROW LEVEL SECURITYиFORCE ROW LEVEL SECURITY». Затем попросите Composer сгенерировать миграцию. - PRE — Review Composer-generated policies. Composer иногда пишет политики без проверки
auth.uid(). Такие политики, какallow select on public.itemsбез пунктаusing, опасно широки. Требуйте соответствия user_id. - DEPLOY — Confirm
FORCE ROW LEVEL SECURITYis live. Откройте Supabase Studio, проверьте переключатель RLS каждой таблицы. Если миграция Composer имелаENABLE, но забылаFORCE, владельцы таблиц (ваши миграции) обходят RLS. Это настоящий пробел. - POST — Run the baas.supabase-rls active check. Он пытается выполнить запись с помощью кнопки «Анон». Если это удастся, RLS на самом деле не обеспечивает принудительного исполнения — вероятно, отсутствует ключевое слово
FORCE.
Аутентификация и сеансы (4 шт.)
Cursor быстро генерирует потоки аутентификации, но часто упускает из виду тонкую проверку на стороне сервера, которая обеспечивает безопасность токенов.
- PRE — Ensure all auth routes use
getUser(). НайдитеgetSession()в маршрутах API и замените наawait supabase.auth.getUser().getSession()считывает непроверенный файл cookie;getUser()проверяет с помощью Supabase бэкенд. - PRE — Check Composer auth handlers for token expiry. Для токенов Magic-link необходима поддержка
expires_atна сервере. По умолчанию Supabase составляет 1 час — не просите Cursor отменить его без реальной причины. - PRE — Audit the sign-in redirect guard. Перенаправление параметра запроса
nextпосле входа в систему должно быть проверено: должно начинаться с/, а не//. Композитор иногда пропускает это. Добавьте его вручную, если он отсутствует. - POST — Test logout server-side state destruction. Войдите, выйдите из системы, проверьте файлы cookie (Инструменты разработчика → Приложение → Файлы cookie). Файл cookie сеанса должен быть немедленно удален. Если оно сохраняется, обработчик выхода из системы не уничтожает состояние.
HTTP заголовки безопасности и CSP (3 элемента)
Cursor по умолчанию редко генерирует промежуточное программное обеспечение. Если вы не спросите явно, CSP и HSTS обычно там нет.
- PRE — Demand CSP in
.cursorrules. Добавьте: «Сгенерируйтеsrc/middleware.tsс помощью Content-Security-Policy. Используйте nonce для script-src, а не unsafe-inline». Затем попросите Cursor сгенерировать его. Без этой подсказки промежуточное программное обеспечение пропускается. - PRE — Verify
src/middleware.tsexists. При структуре каталогаsrc/Next.js получает толькоsrc/middleware.ts. Корневой уровеньmiddleware.tsигнорируется. Если CSP не приземляется, убедитесь, что файл находится в правильном месте. - POST — Run headers.security-headers. В отчетах о пассивном сканировании отсутствуют CSP, HSTS, X-Frame-Options, X-Content-Type-Options. Откройте отчет и следуйте инструкциям по исправлению для вашей платформы развертывания.
Гигиена развертывания (5 пунктов)
Приложения Cursor часто попадают на Vercel, который имеет хорошие настройки по умолчанию, но требует явного усиления границы build/deploy.
- DEPLOY — Check Vercel env-var scoping. Настройки → Переменные среды → каждый секрет должен быть ограничен только Production. Никогда не делитесь
sk_live_*с предварительной версией или разработкой. - DEPLOY — Disable build-log secret echo. Если ваш рабочий процесс действий
vercel.jsonили GitHub имеетecho $SECRET, удалите его. Журналы сборки архивируются публично; секреты в журналах скомпрометированы. - DEPLOY — Use Vercel's managed secrets, not inline workflow vars. Vercel Настройки → Переменные среды шифруются в неактивном состоянии. GitHub Секреты действий лучше, чем ничего, но они предназначены для CI, а не для интеграции платформы развертывания.
- POST — Verify CSP nonce on the deployed preview. Откройте ссылку Vercel предварительного просмотра в браузере, откройте DevTools → Сеть → корневой ответ HTML. Заголовок CSP должен присутствовать и включать
'strict-dynamic'с уникальным одноразовым номером для каждого запроса. - POST — Rotate any key that ever shipped, even to Preview. Если ключ попал в производственный комплект хотя бы за 10 минут, он скомпрометирован. Немедленно поверните.
Cursor-специфичные ошибки (4 пункта)
Шаблоны, уникальные для рабочего процесса Cursor, которые создают угрозы безопасности:
- Agent mode auto-fixes propagate old patterns. Если вы попросите агента «исправить ошибки аутентификации», он может повторно создать один и тот же файл аутентификации несколько раз, каждый раз встраивая один и тот же служебный ключ, если он находится в контексте кодовой базы. Сначала очистите оригинал, а затем попросите агента исправить его.
- Индексирование Cursor Index leaks intent. Cursor
@codebaseявляется мощным инструментом, но если ваш каталог.cursorкогда-либо будет раскрыт (неправильно настроен S3, история git), индекс покажет вашу архитектуру и секретные шаблоны. Держите.cursorлокальным. - Composer mode loses context between files. Каждый файл, создаваемый Composer, является свежим. Если вы попросите его сгенерировать файл клиента, а затем маршрут API, они могут использовать разные конфигурации клиента Supabase. Просмотрите оба и убедитесь, что они соответствуют вашей архитектуре.
- 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, если вы смешиваете инструменты.
