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.

Rahasia dan kunci API (4 item)

v0 menangani env vars dengan baik di editor tetapi repo yang diekspor tidak mewarisi struktur itu.

  1. PRE β€” After exporting, audit all NEXT_PUBLIC_ vars in the exported .env. Apa pun yang diawali NEXT_PUBLIC_ dikirimkan dalam paket klien. Konfirmasikan bahwa titik akhir tersebut aman (API, hanya kunci langsung, tidak pernah peran layanan).
  2. PRE β€” Verify .env.local (or .env.*.local) is in .gitignore. Saat Anda mengekspor dari v0, repo yang diekspor harus memiliki .env*.local di .gitignore. Verifikasi ini.
  3. PRE β€” Check that v0 didn't hardcode Stripe / Anthropic / OpenAI test keys. Kode yang diekspor v0 terkadang menyertakan kunci sk_test_* atau pk_test_* yang dikodekan secara keras dalam komponen. Ganti dengan env vars sebelum diterapkan ke produksi.
  4. POST β€” Run Secrets in JavaScript Bundles on the deployed Vercel Preview. Jika ada kunci yang mencapai bundel, pemindaian akan menemukannya.

Kontrol akses basis data (3 item)

Pengambilan data v0 biasanya dirutekan melalui Next.js Tindakan Server. Koneksi database itu sendiri berada di sisi server, namun kebijakan RLS harus jelas.

  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. Setiap kebijakan harus memvalidasi kepemilikan pengguna melalui auth.uid().
  3. POST β€” Run the Supabase Row-Level Security active check on a verified domain. Cek tersebut mengonfirmasi RLS penegakan hukum.

Otentikasi dan sesi (4 item)

v0 scaffolds autentikasi tetapi tidak menerapkan verifikasi sisi server secara otomatis.

  1. PRE β€” Ensure Server Actions use getUser(), not getSession(). Ganti getSession() di fungsi Tindakan Server dengan await supabase.auth.getUser().
  2. PRE β€” Verify that magic-link tokens have server-enforced expiry. Default Supabase adalah 1 jam. Jika kode yang dihasilkan v0 menimpanya, kembalikan ke default.
  3. PRE β€” Check the sign-in redirect guard. Param next harus dimulai dengan /, jangan pernah //. v0 biasanya menyertakan ini, tetapi verifikasi.
  4. POST β€” Test logout clears the session. Masuk, keluar, periksa cookie (DevTools β†’ Aplikasi β†’ Cookie). Cookie sesi harus dihapus.

HTTP header dan CSP (3 item)

Aplikasi v0 yang diekspor memerlukan middleware untuk CSP. Internal editor CSP tidak terbawa.

  1. PRE β€” Create src/middleware.ts with CSP if it doesn't exist. v0 terkadang mengekspor tanpa middleware. Jika tidak ada, buat dengan CSP berbasis nonce.
  2. PRE β€” Verify CSP includes 'strict-dynamic' and a per-request nonce. CSP v0 di editor aman tetapi versi yang diekspor mungkin tidak lengkap.
  3. POST β€” Run HTTP Security Headers on a Vercel Preview. Pemindaian melaporkan header yang hilang dan panduan perbaikan.

Kebersihan penempatan (5 item)

v0 mengekspor ke repo GitHub Anda dan Anda menerapkannya ke Vercel. Pengaturan lingkungan adalah tanggung jawab Anda.

  1. DEPLOY β€” Verify .env.local is in .gitignore in the exported repo. Jalankan git ls-files .env* untuk memeriksa.
  2. DEPLOY β€” Set production env vars in Vercel Settings β†’ Environment Variables. Cakupan masing-masing ke Produksi saja. Jangan pernah berbagi sk_live_* dengan Pratinjau.
  3. DEPLOY β€” Audit Vercel build logs for secret echo. Periksa apakah tidak ada echo $SECRET atau yang setara dalam perintah build Anda.
  4. DEPLOY β€” Confirm Vercel Preview redeploys work correctly. Setiap penerapan Pratinjau harus menghasilkan CSP nonce baru.
  5. POST β€” Rotate any test key that reached production. Bahkan kunci sk_test_* harus diputar setelah pemaparan produksi.

gotcha khusus v0 (3 item)

Pola unik untuk ekspor editor-ke-repo 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. Exported middleware is sometimes incomplete. ekspor src/middleware.ts v0 mungkin kurang CSP atau HSTS. Verifikasikan sudah selesai sebelum menyebarkan.
  3. Server Actions don't automatically verify auth. v0 menghasilkan Tindakan Server tanpa pemeriksaan autentikasi bawaan. Tambahkan const { user } = await supabase.auth.getUser() ke setiap Tindakan Server yang mengubah status secara manual.

Langkah selanjutnya

Periksa general vibe coding security checklist untuk 51 item lintas alat. Kemudian tinjau step-by-step hardening untuk mengetahui pola yang lebih mendalam pada CSP, RLS, dan keamanan Tindakan Server.

// scan your app

Cukup membaca. Saatnya temukan celah di aplikasimu.

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 tingkat β€” 3 pemindaian / bulan, tanpa kartu.
  • Pemindaian pasif terhadap URL apa pun β€” tidak memerlukan verifikasi domain.
  • Disetel untuk 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