// 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.
- PRE β After exporting, audit all
NEXT_PUBLIC_vars in the exported.env. Apa pun yang diawaliNEXT_PUBLIC_dikirimkan dalam paket klien. Konfirmasikan bahwa titik akhir tersebut aman (API, hanya kunci langsung, tidak pernah peran layanan). - PRE β Verify
.env.local(or.env.*.local) is in.gitignore. Saat Anda mengekspor dari v0, repo yang diekspor harus memiliki.env*.localdi.gitignore. Verifikasi ini. - PRE β Check that v0 didn't hardcode Stripe / Anthropic / OpenAI test keys. Kode yang diekspor v0 terkadang menyertakan kunci
sk_test_*ataupk_test_*yang dikodekan secara keras dalam komponen. Ganti dengan env vars sebelum diterapkan ke produksi. - 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.
- 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. Setiap kebijakan harus memvalidasi kepemilikan pengguna melalui
auth.uid(). - 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.
- PRE β Ensure Server Actions use
getUser(), notgetSession(). GantigetSession()di fungsi Tindakan Server denganawait supabase.auth.getUser(). - PRE β Verify that magic-link tokens have server-enforced expiry. Default Supabase adalah 1 jam. Jika kode yang dihasilkan v0 menimpanya, kembalikan ke default.
- PRE β Check the sign-in redirect guard. Param
nextharus dimulai dengan/, jangan pernah//. v0 biasanya menyertakan ini, tetapi verifikasi. - 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.
- PRE β Create
src/middleware.tswith CSP if it doesn't exist. v0 terkadang mengekspor tanpa middleware. Jika tidak ada, buat dengan CSP berbasis nonce. - PRE β Verify CSP includes
'strict-dynamic'and a per-request nonce. CSP v0 di editor aman tetapi versi yang diekspor mungkin tidak lengkap. - 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.
- DEPLOY β Verify
.env.localis in.gitignorein the exported repo. Jalankangit ls-files .env*untuk memeriksa. - DEPLOY β Set production env vars in Vercel Settings β Environment Variables. Cakupan masing-masing ke Produksi saja. Jangan pernah berbagi
sk_live_*dengan Pratinjau. - DEPLOY β Audit Vercel build logs for secret echo. Periksa apakah tidak ada
echo $SECRETatau yang setara dalam perintah build Anda. - DEPLOY β Confirm Vercel Preview redeploys work correctly. Setiap penerapan Pratinjau harus menghasilkan CSP nonce baru.
- 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:
dangerouslySetInnerHTMLcan come back during design iterations. Review each exported version and replace any occurrences with sanitized alternatives (likereact-markdownwithremark).- Exported middleware is sometimes incomplete. ekspor
src/middleware.tsv0 mungkin kurang CSP atau HSTS. Verifikasikan sudah selesai sebelum menyebarkan. - 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.
