FixVibe

// docs / security guides / v0 checklist

v0 security checklist: 22 items for Next.js

v0 generates React + Tailwind + shadcn/ui components and full Next.js apps for Vercel. This checklist targets v0-specific risks: design iterations that re-add dangerouslySetInnerHTML, exported codebases that lose middleware, Server Actions that skip auth verification, and environment variables that have to be set again once the code lives in your own repo. 22 items across secrets, database, auth, headers, deployment, and v0-specific gotchas.

PRE = pre-deploy (audit your source). DEPLOY = at deploy time. POST = post-deploy verification.

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

v0 хорошо обрабатывает переменные env в редакторе, но экспортированные репозитории не наследуют эту структуру.

  1. PRE — After exporting, audit all NEXT_PUBLIC_ vars in the exported .env. Все, что имеет префикс NEXT_PUBLIC_, поставляется в комплекте клиента. Убедитесь, что они безопасны (API конечные точки, только анонимные ключи, никогда не обслуживайте роли).
  2. PRE — Verify .env.local (or .env.*.local) is in .gitignore. При экспорте из версии 0 в экспортированном репозитории должно быть .env*.local в .gitignore. Проверьте это.
  3. Экспортированный код PRE — Check that v0 didn't hardcode Stripe / Anthropic / OpenAI test keys. v0 иногда включает клавиши sk_test_* или pk_test_*, жестко закодированные в компонентах. Замените переменные окружения перед развертыванием в рабочей среде.
  4. POST — Run Secrets in JavaScript Bundles on the deployed Vercel Preview. Если какой-либо ключ достиг пакета, сканирование его находит.

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

Извлечение данных v0 обычно осуществляется через действия сервера Next.js. Само соединение с базой данных осуществляется на стороне сервера, но политики RLS должны быть явными.

  1. PRE — If using Supabase, enable RLS on every public table. v0 doesn't generate RLS by default. Add ENABLE ROW LEVEL SECURITY to every CREATE TABLE migration.
  2. PRE — Write explicit RLS policies per table and role. Каждая политика должна подтверждать право собственности пользователя через auth.uid().
  3. POST — Run the Supabase Row-Level Security active check on a verified domain. Проверка подтверждает исполнение RLS.

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

v0 поддерживает аутентификацию, но не обеспечивает автоматическую проверку на стороне сервера.

  1. PRE — Ensure Server Actions use getUser(), not getSession(). Замените любые getSession() в функциях действий сервера на await supabase.auth.getUser().
  2. PRE — Verify that magic-link tokens have server-enforced expiry. Значение по умолчанию Supabase составляет 1 час. Если сгенерированный код v0 переопределяет его, вернитесь к значению по умолчанию.
  3. PRE — Check the sign-in redirect guard. Параметр next должен начинаться с /, а не //. v0 обычно включает это, но проверьте.
  4. POST — Test logout clears the session. Войдите, выйдите из системы, проверьте файлы cookie (Инструменты разработчика → Приложение → Файлы cookie). Файл cookie сеанса необходимо удалить.

Заголовки HTTP и CSP (3 шт.)

Экспортированным приложениям v0 требуется промежуточное программное обеспечение для CSP. Внутренний CSP редактора не переносится.

  1. PRE — Create src/middleware.ts with CSP if it doesn't exist. v0 иногда экспортируется без промежуточного программного обеспечения. Если он отсутствует, сгенерируйте его с помощью CSP на основе nonce.
  2. PRE — Verify CSP includes 'strict-dynamic' and a per-request nonce. v0 CSP в редакторе безопасен, но экспортированная версия может быть неполной.
  3. POST — Run HTTP Security Headers on a Vercel Preview. Сканирование сообщает об отсутствии заголовков и дает рекомендации по исправлению.

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

v0 экспортируется в ваш репозиторий GitHub, и вы развертываете его в Vercel. Настройка среды — ваша ответственность.

  1. DEPLOY — Verify .env.local is in .gitignore in the exported repo. Запустите git ls-files .env* для проверки.
  2. DEPLOY — Set production env vars in Vercel Settings → Environment Variables. Ограничьте каждое действие только Production. Никогда не делитесь sk_live_* с помощью предварительного просмотра.
  3. DEPLOY — Audit Vercel build logs for secret echo. Убедитесь, что в вашей команде сборки нет echo $SECRET или эквивалента.
  4. DEPLOY — Confirm Vercel Preview redeploys work correctly. Каждое развертывание предварительной версии должно генерировать новый одноразовый номер CSP.
  5. POST — Rotate any test key that reached production. Даже sk_test_* клавиши следует повернуть после производственного воздействия.

Ошибки, специфичные для v0 (3 пункта)

Шаблоны, уникальные для экспорта из редактора в репозиторий версии 0:

  1. dangerouslySetInnerHTML can come back during design iterations. Review each exported version and replace any occurrences with sanitized alternatives (like react-markdown with remark).
  2. В экспорте Exported middleware is sometimes incomplete. v0 src/middleware.ts может отсутствовать CSP или HSTS. Перед развертыванием убедитесь, что все выполнено.
  3. Server Actions don't automatically verify auth. v0 генерирует действия сервера без встроенных проверок аутентификации. Добавляйте const { user } = await supabase.auth.getUser() к каждому действию сервера, изменяющему состояние, вручную.

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

Проверьте general vibe coding security checklist на наличие 51 элементов перекрестного инструмента. Затем просмотрите step-by-step hardening для более детальных шаблонов безопасности CSP, RLS и действий сервера.

// scan your app

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

Drop in a URL — FixVibe runs every passive check from this guide plus the rest of its 230+ passive checks, usually in under a minute. Free, no install, no card.

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