// docs / security guides / lovable checklist
Lovable security checklist: 25 items before launch
Lovable is a fast path from idea to a published full-stack app on Supabase and Vite. This checklist targets the risks that come with that stack: RLS that must be enabled and tightened on every table Lovable creates, test keys from integrations, import.meta.env leaking env vars into the Vite bundle, GitHub sync exposing secrets, and missing security headers. 25 items across secrets, database, auth, headers, deployment, and Lovable-specific gotchas.
PRE = pre-deploy (audit your source). DEPLOY = at deploy time. POST = post-deploy verification.
Rahasia dan kunci API (5 item)
Integrasi pasar Lovable dan pembangunan Vite dapat membocorkan env vars ke dalam bundel klien jika tidak hati-hati.
- PRE β Audit
import.meta.envreferences. Vite mengekspos semua var yang diawaliVITE_sebagaiimport.meta.env.VITE_*di klien. Jangan pernah menggunakanVITE_SUPABASE_SERVICE_KEYatauVITE_STRIPE_SECRET. Rutekan melalui titik akhir khusus server saja. - Integrasi PRE β Replace Lovable marketplace test keys with live restricted keys. Lovable Stripe / Kirim ulang / dll. terkadang dikirimkan dengan kunci
sk_test_*ataupk_test_*. Sebelum ditayangkan, tukarkan dengan kunci terbatas langsung yang membatasi kerusakan jika disusupi. - PRE β Check the
.envfile is not committed. Lovable membuat perancah file.envdengan kunci integrasi. Jalankangit ls-files .env. Jika terlacak, segera hapus:git rm --cached .envdan tambahkan ke.gitignore. - PRE β Verify GitHub sync doesn't expose service keys. Jika Lovable disinkronkan ke GitHub, konfirmasikan alur kerja Tindakan GitHub atau pengaturan Vercel agar tidak menggemakan rahasia ke dalam log build. Periksa Tindakan Anda β Alur kerja berjalan β klik proses β lihat apakah ada rahasia yang dicetak.
- POST β Run Secrets in JavaScript Bundles on the deployed app. Lovable Build Vite dapat membocorkan kunci ke
import.meta.env. Pemindaian pasif akan menemukannya.
Kontrol akses basis data (5 item)
Every table Lovable creates needs RLS enabled and tightened before production.
- PRE β Enable RLS on every public table. In Supabase Studio, Tables β for each
public.*table β the RLS toggle must be ON, with policies for each command. - PRE β Write explicit policies per table and role. Minimum: SELECT memungkinkan pengguna hanya membaca baris di mana
user_id = auth.uid(). Lovable terkadang menghasilkan tabel tanpa kebijakan; Anda harus menambahkannya. - PRE β Check Lovable's generated policies, not just the toggle. A policy such as
USING (true)keeps RLS "on" while letting every caller through. Scope each policy toauth.uid(). (FORCE ROW LEVEL SECURITYonly affects the table owner; it does not fix an open policy.) - DEPLOY β Re-verify RLS is enforced after deploy. Buka Supabase Studio pasca penerapan. Tombol RLS setiap tabel harus ON. Jika tidak, migrasi Anda tidak berlaku.
- POST β Run a FixVibe scan on the deployed app. Check the Supabase Row-Level Security result: it shows any table an anonymous visitor can read with your public key.
Otentikasi dan sesi (4 item)
Lovable autentikasinya adalah Supabase Auth. Risikonya terletak pada cara Lovable menyatukannya.
- PRE β Ensure all API routes use
getUser(), notgetSession().getSession()membaca cookie yang belum diverifikasi;getUser()memvalidasi dengan Supabase. CarigetSession()di API penangan dan gantikan. - PRE β Check Lovable's generated auth handlers for token expiry. Token tautan ajaib memerlukan masa berlaku yang diberlakukan oleh server. Standarnya adalah 1 jam β jangan timpa kecuali penting.
- PRE β Audit the sign-in redirect guard. Parameter kueri
nextharus dimulai dengan/, jangan pernah//. Jika tidak ada, tambahkan pelindung secara manual. - POST β Test logout destroys the session. Masuk, keluar, periksa cookie (DevTools β Aplikasi β Cookie). Cookie sesi harus dihapus.
HTTP header dan CSP (3 item)
Perancah Vite Lovable tidak menambahkan CSP secara default. Host statis memerlukan konfigurasi header eksplisit.
- PRE β Add security headers via your host's config. Vercel:
vercel.jsonheaderssusunan. Netlifikasi:_headersberkas. Sertakan CSP, HSTS, Opsi-Bingkai-X, Opsi-Jenis-Konten-X. - PRE β CSP must not have
'unsafe-inline'inscript-src. Gunakan nonce atau hash. Lovable Vite build akan bekerja dengan CSP yang ketat. - POST β Run HTTP Security Headers on the deployed URL. Pemeriksaan ini melaporkan header yang hilang dan memberikan panduan perbaikan khusus platform.
Kebersihan penempatan (5 item)
Lovable hosts published apps itself (Lovable docs). If you export the code and deploy it to Vercel, Netlify or Cloudflare Pages instead, each host handles headers and env vars differently.
- DEPLOY β Scope env vars to Production only. Vercel: Pengaturan β Variabel Lingkungan β cakupan masing-masing ke Produksi. Jangan pernah membagikan kunci pengujian Stripe dengan Pratinjau.
- DEPLOY β Verify build logs don't echo secrets. Periksa log build penyedia penerapan Anda. Jika ada rahasia yang tercetak, maka rahasia itu akan terbobol.
- DEPLOY β Add security headers to
vercel.jsonor_headers. Untuk Vercel, gunakan konfigurasiheaders. Untuk Netlify / Cloudflare, gunakan file_headersdi direktori publik. - POST β Test a Vercel Preview link in a private browser window. Pastikan CSP nonce segar pada setiap permintaan dan header ada.
- POST β Rotate any test key that ever shipped to production. Meskipun itu adalah kunci
sk_test_*, putar kunci tersebut setelah Anda melihatnya dalam produksi.
Lovable - gotcha khusus (3 item)
Pola unik untuk perancah Lovable dan alur penerapan:
import.meta.envis Vite-specific and all-or-nothing. Vite mengeksposVITE_*vars dalam bundel klien berdasarkan desain. Tidak ada konsep env khusus server di Vite tanpa batasan API yang terpisah. Lovable defaultnya adalah klien-berat; Anda harus menambahkan rute API untuk operasi sensitif.- GitHub sync can auto-commit without review. Jika Lovable menyinkronkan perubahan kembali ke GitHub, pastikan alur kerja tidak diterapkan secara otomatis tanpa persetujuan Anda. Jika tidak, pembaruan berbahaya dapat masuk ke main.
- Halaman Static-host headers are a different beast than middleware. Vercel, Netlify, dan Cloudflare menangani header secara berbeda. Jika Anda berpindah host, periksa kembali apakah konfigurasi header Anda sudah diterapkan β platform mungkin tidak memberikan kesalahan jika header tidak didukung.
Langkah selanjutnya
Tinjau general vibe coding security checklist untuk 51 item lintas alat. Kemudian lihat step-by-step hardening untuk pola yang lebih mendalam di CSP, RLS, dan auth.
