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.

Segredos e chaves API (4 itens)

v0 lida bem com env vars no editor, mas os repositórios exportados não herdam essa estrutura.

  1. PRE — After exporting, audit all NEXT_PUBLIC_ vars in the exported .env. Qualquer coisa com o prefixo NEXT_PUBLIC_ vem no pacote do cliente. Confirme se eles estão seguros (API endpoints, apenas chaves anônimas, nunca funções de serviço).
  2. PRE — Verify .env.local (or .env.*.local) is in .gitignore. Quando você exporta da v0, o repositório exportado deve ter .env*.local em .gitignore. Verifique isso.
  3. O código exportado de PRE — Check that v0 didn't hardcode Stripe / Anthropic / OpenAI test keys. v0 às vezes inclui chaves sk_test_* ou pk_test_* codificadas em componentes. Substitua por env vars antes de implantar na produção.
  4. POST — Run Secrets in JavaScript Bundles on the deployed Vercel Preview. Se alguma chave chegar ao pacote, a varredura a encontrará.

Controle de acesso ao banco de dados (3 itens)

A busca de dados da v0 geralmente é roteada por meio de Next.js Server Actions. A conexão com o banco de dados em si é do lado do servidor, mas as políticas RLS devem ser explícitas.

  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. Cada política deve validar a propriedade do usuário por meio de auth.uid().
  3. POST — Run the Supabase Row-Level Security active check on a verified domain. A verificação confirma a aplicação RLS.

Autenticação e sessões (4 itens)

v0 estrutura a autenticação, mas não impõe a verificação do lado do servidor automaticamente.

  1. PRE — Ensure Server Actions use getUser(), not getSession(). Substitua qualquer getSession() nas funções de ação do servidor por await supabase.auth.getUser().
  2. PRE — Verify that magic-link tokens have server-enforced expiry. O padrão Supabase é 1 hora. Se o código gerado por v0 o substituir, reverta para o padrão.
  3. PRE — Check the sign-in redirect guard. O parâmetro next deve começar com /, nunca //. v0 geralmente inclui isso, mas verifique.
  4. POST — Test logout clears the session. Faça login, saia, inspecione cookies (DevTools → Aplicativo → Cookies). O cookie da sessão deve ser limpo.

HTTP cabeçalhos e CSP (3 itens)

Os aplicativos exportados da v0 precisam de middleware para CSP. O CSP interno do editor não é transferido.

  1. PRE — Create src/middleware.ts with CSP if it doesn't exist. v0 às vezes exporta sem middleware. Se estiver faltando, gere-o com um CSP baseado em nonce.
  2. PRE — Verify CSP includes 'strict-dynamic' and a per-request nonce. v0 CSP no editor é seguro, mas a versão exportada pode estar incompleta.
  3. POST — Run HTTP Security Headers on a Vercel Preview. A verificação relata cabeçalhos ausentes e corrige orientações.

Higiene de implantação (5 itens)

v0 exporta para seu repositório GitHub e você implanta em Vercel. A configuração do ambiente é de sua responsabilidade.

  1. DEPLOY — Verify .env.local is in .gitignore in the exported repo. Execute git ls-files .env* para verificar.
  2. DEPLOY — Set production env vars in Vercel Settings → Environment Variables. Escopo de cada um apenas para Produção. Nunca compartilhe sk_live_* com o Preview.
  3. DEPLOY — Audit Vercel build logs for secret echo. Verifique se não há echo $SECRET ou equivalente em seu comando de construção.
  4. DEPLOY — Confirm Vercel Preview redeploys work correctly. Cada implantação de visualização deve gerar um novo CSP nonce.
  5. POST — Rotate any test key that reached production. Mesmo as teclas sk_test_* devem ser giradas após a exposição da produção.

Dicas específicas para v0 (3 itens)

Padrões exclusivos para exportação do editor para repositório da v0:

  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. A exportação src/middleware.ts de Exported middleware is sometimes incomplete. v0 pode não ter CSP ou HSTS. Verifique se está completo antes de implantar.
  3. Server Actions don't automatically verify auth. v0 gera ações do servidor sem verificações de autenticação integradas. Adicione const { user } = await supabase.auth.getUser() a cada ação do servidor que altera o estado manualmente.

Próximas etapas

Verifique general vibe coding security checklist para 51 itens de ferramentas cruzadas. Em seguida, revise step-by-step hardening para padrões mais profundos sobre CSP, RLS e segurança de ação do servidor.

// escaneie seu app

Pare de ler. Comece a encontrar as falhas no seu.

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 tier — 3 scans / mês, sem cartão.
  • Scans passivos contra qualquer URL — sem verificação de domínio.
  • Afinado para 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