// 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.
- PRE — After exporting, audit all
NEXT_PUBLIC_vars in the exported.env. Qualquer coisa com o prefixoNEXT_PUBLIC_vem no pacote do cliente. Confirme se eles estão seguros (API endpoints, apenas chaves anônimas, nunca funções de serviço). - PRE — Verify
.env.local(or.env.*.local) is in.gitignore. Quando você exporta da v0, o repositório exportado deve ter.env*.localem.gitignore. Verifique isso. - O código exportado de PRE — Check that v0 didn't hardcode Stripe / Anthropic / OpenAI test keys. v0 às vezes inclui chaves
sk_test_*oupk_test_*codificadas em componentes. Substitua por env vars antes de implantar na produção. - 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.
- 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. Cada política deve validar a propriedade do usuário por meio de
auth.uid(). - 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.
- PRE — Ensure Server Actions use
getUser(), notgetSession(). Substitua qualquergetSession()nas funções de ação do servidor porawait supabase.auth.getUser(). - 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.
- PRE — Check the sign-in redirect guard. O parâmetro
nextdeve começar com/, nunca//. v0 geralmente inclui isso, mas verifique. - 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.
- PRE — Create
src/middleware.tswith CSP if it doesn't exist. v0 às vezes exporta sem middleware. Se estiver faltando, gere-o com um CSP baseado em nonce. - PRE — Verify CSP includes
'strict-dynamic'and a per-request nonce. v0 CSP no editor é seguro, mas a versão exportada pode estar incompleta. - 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.
- DEPLOY — Verify
.env.localis in.gitignorein the exported repo. Executegit ls-files .env*para verificar. - 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. - DEPLOY — Audit Vercel build logs for secret echo. Verifique se não há
echo $SECRETou equivalente em seu comando de construção. - DEPLOY — Confirm Vercel Preview redeploys work correctly. Cada implantação de visualização deve gerar um novo CSP nonce.
- 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:
dangerouslySetInnerHTMLcan come back during design iterations. Review each exported version and replace any occurrences with sanitized alternatives (likereact-markdownwithremark).- A exportação
src/middleware.tsde Exported middleware is sometimes incomplete. v0 pode não ter CSP ou HSTS. Verifique se está completo antes de implantar. - 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.
