// 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 в редакторе, но экспортированные репозитории не наследуют эту структуру.
- PRE — After exporting, audit all
NEXT_PUBLIC_vars in the exported.env. Все, что имеет префиксNEXT_PUBLIC_, поставляется в комплекте клиента. Убедитесь, что они безопасны (API конечные точки, только анонимные ключи, никогда не обслуживайте роли). - PRE — Verify
.env.local(or.env.*.local) is in.gitignore. При экспорте из версии 0 в экспортированном репозитории должно быть.env*.localв.gitignore. Проверьте это. - Экспортированный код PRE — Check that v0 didn't hardcode Stripe / Anthropic / OpenAI test keys. v0 иногда включает клавиши
sk_test_*илиpk_test_*, жестко закодированные в компонентах. Замените переменные окружения перед развертыванием в рабочей среде. - POST — Run Secrets in JavaScript Bundles on the deployed Vercel Preview. Если какой-либо ключ достиг пакета, сканирование его находит.
Контроль доступа к базе данных (3 шт.)
Извлечение данных v0 обычно осуществляется через действия сервера Next.js. Само соединение с базой данных осуществляется на стороне сервера, но политики RLS должны быть явными.
- PRE — If using Supabase, enable RLS on every public table. v0 doesn't generate RLS by default. Add
ENABLE ROW LEVEL SECURITYto everyCREATE TABLEmigration. - PRE — Write explicit RLS policies per table and role. Каждая политика должна подтверждать право собственности пользователя через
auth.uid(). - POST — Run the Supabase Row-Level Security active check on a verified domain. Проверка подтверждает исполнение RLS.
Аутентификация и сеансы (4 шт.)
v0 поддерживает аутентификацию, но не обеспечивает автоматическую проверку на стороне сервера.
- PRE — Ensure Server Actions use
getUser(), notgetSession(). Замените любыеgetSession()в функциях действий сервера наawait supabase.auth.getUser(). - PRE — Verify that magic-link tokens have server-enforced expiry. Значение по умолчанию Supabase составляет 1 час. Если сгенерированный код v0 переопределяет его, вернитесь к значению по умолчанию.
- PRE — Check the sign-in redirect guard. Параметр
nextдолжен начинаться с/, а не//. v0 обычно включает это, но проверьте. - POST — Test logout clears the session. Войдите, выйдите из системы, проверьте файлы cookie (Инструменты разработчика → Приложение → Файлы cookie). Файл cookie сеанса необходимо удалить.
Заголовки HTTP и CSP (3 шт.)
Экспортированным приложениям v0 требуется промежуточное программное обеспечение для CSP. Внутренний CSP редактора не переносится.
- PRE — Create
src/middleware.tswith CSP if it doesn't exist. v0 иногда экспортируется без промежуточного программного обеспечения. Если он отсутствует, сгенерируйте его с помощью CSP на основе nonce. - PRE — Verify CSP includes
'strict-dynamic'and a per-request nonce. v0 CSP в редакторе безопасен, но экспортированная версия может быть неполной. - POST — Run HTTP Security Headers on a Vercel Preview. Сканирование сообщает об отсутствии заголовков и дает рекомендации по исправлению.
Гигиена развертывания (5 пунктов)
v0 экспортируется в ваш репозиторий GitHub, и вы развертываете его в Vercel. Настройка среды — ваша ответственность.
- DEPLOY — Verify
.env.localis in.gitignorein the exported repo. Запуститеgit ls-files .env*для проверки. - DEPLOY — Set production env vars in Vercel Settings → Environment Variables. Ограничьте каждое действие только Production. Никогда не делитесь
sk_live_*с помощью предварительного просмотра. - DEPLOY — Audit Vercel build logs for secret echo. Убедитесь, что в вашей команде сборки нет
echo $SECRETили эквивалента. - DEPLOY — Confirm Vercel Preview redeploys work correctly. Каждое развертывание предварительной версии должно генерировать новый одноразовый номер CSP.
- POST — Rotate any test key that reached production. Даже
sk_test_*клавиши следует повернуть после производственного воздействия.
Ошибки, специфичные для v0 (3 пункта)
Шаблоны, уникальные для экспорта из редактора в репозиторий версии 0:
dangerouslySetInnerHTMLcan come back during design iterations. Review each exported version and replace any occurrences with sanitized alternatives (likereact-markdownwithremark).- В экспорте Exported middleware is sometimes incomplete. v0
src/middleware.tsможет отсутствовать CSP или HSTS. Перед развертыванием убедитесь, что все выполнено. - 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 и действий сервера.
