// 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.
Secretos y claves API (5 artículos)
Las integraciones del mercado de Lovable y la compilación de Vite pueden filtrar variables de entorno en el paquete del cliente si no se tiene cuidado.
- PRE — Audit
import.meta.envreferences. Vite expone todas las variables con prefijoVITE_comoimport.meta.env.VITE_*en el cliente. Nunca utilicesVITE_SUPABASE_SERVICE_KEYoVITE_STRIPE_SECRET. En su lugar, enrútelo a través de un punto final exclusivo del servidor. - Las integraciones de PRE — Replace Lovable marketplace test keys with live restricted keys. Lovable Stripe / Reenviar / etc. a veces se envían con claves
sk_test_*opk_test_*. Antes de publicarlas, cámbielas por claves restringidas activas que limiten los daños en caso de verse comprometidas. - PRE — Check the
.envfile is not committed. Lovable crea un scaffolding en un archivo.envcon claves de integración. Ejecutegit ls-files .env. Si se realiza un seguimiento, elimínelo inmediatamente:git rm --cached .envy agréguelo a.gitignore. - PRE — Verify GitHub sync doesn't expose service keys. Si Lovable se sincroniza con GitHub, confirme el flujo de trabajo de acciones GitHub o que la configuración de Vercel no repita los secretos en los registros de compilación. Verifique sus Acciones → Ejecuciones de flujo de trabajo → haga clic en una ejecución → vea si se imprime algún secreto.
- La compilación Vite de POST — Run Secrets in JavaScript Bundles on the deployed app. Lovable puede filtrar claves en
import.meta.env. Un escaneo pasivo los encontrará.
Control de acceso a la base de datos (5 artículos)
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. Mínimo: SELECT permite al usuario leer solo filas donde
user_id = auth.uid(). Lovable a veces genera tablas sin políticas; debes agregarlos. - 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. Abra Supabase Studio después de la implementación. El interruptor RLS de cada tabla debe ser ON. De lo contrario, su migración no aplicó.
- 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.
Autenticación y sesiones (4 artículos)
La autenticación de Lovable es Supabase Auth. El riesgo está en cómo Lovable lo conecta.
- PRE — Ensure all API routes use
getUser(), notgetSession().getSession()lee una cookie no verificada;getUser()valida con Supabase. BusquegetSession()en los controladores API y reemplácelo. - PRE — Check Lovable's generated auth handlers for token expiry. Los tokens Magic-link necesitan una caducidad impuesta por el servidor. El valor predeterminado es 1 hora; no lo anule a menos que sea esencial.
- PRE — Audit the sign-in redirect guard. El parámetro de consulta
nextdebe comenzar con/, nunca//. Si falta, agregue el protector manualmente. - POST — Test logout destroys the session. Iniciar sesión, cerrar sesión, inspeccionar las cookies (DevTools → Aplicación → Cookies). La cookie de sesión debe borrarse.
HTTP encabezados y CSP (3 elementos)
El andamio Vite de Lovable no agrega CSP de forma predeterminada. Los hosts estáticos requieren una configuración de encabezado explícita.
- PRE — Add security headers via your host's config. Vercel:
vercel.jsonheadersmatriz. Netlify: archivo_headers. Incluya CSP, HSTS, X-Frame-Options, X-Content-Type-Options. - PRE — CSP must not have
'unsafe-inline'inscript-src. Utilice nonces o hashes. La compilación Vite de Lovable funcionará con CSP estricto. - POST — Run HTTP Security Headers on the deployed URL. La verificación informa que faltan encabezados y proporciona orientación para solucionar problemas específicos de la plataforma.
Higiene del despliegue (5 artículos)
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: Configuración → Variables de entorno → alcance cada uno a Producción. Nunca comparta claves de prueba Stripe con Vista previa.
- DEPLOY — Verify build logs don't echo secrets. Verifique los registros de compilación de su proveedor de implementación. Si se imprime algún secreto, está comprometido.
- DEPLOY — Add security headers to
vercel.jsonor_headers. Para Vercel, utiliceheadersconfig. Para Netlify / Cloudflare, use el archivo_headersen el directorio público. - POST — Test a Vercel Preview link in a private browser window. Asegúrese de que CSP nonce esté actualizado en cada solicitud y que los encabezados estén presentes.
- POST — Rotate any test key that ever shipped to production. Incluso si es una clave
sk_test_*, gírala después de haberla visto en producción.
Lovable errores específicos (3 elementos)
Patrones exclusivos del andamio y el flujo de implementación de Lovable:
import.meta.envis Vite-specific and all-or-nothing. Vite exponeVITE_*vars en el paquete del cliente por diseño. No existe un concepto de entorno de servidor exclusivo en Vite sin un límite API separado. El valor predeterminado de Lovable es el de muchos clientes; debe agregar rutas API para operaciones confidenciales.- GitHub sync can auto-commit without review. Si Lovable sincroniza nuevamente los cambios a GitHub, confirme que el flujo de trabajo no se esté impulsando automáticamente sin su aprobación. De lo contrario, una actualización maliciosa podría llegar a main.
- Las páginas Static-host headers are a different beast than middleware. Vercel, Netlify y Cloudflare manejan los encabezados de manera diferente. Si cambia de host, vuelva a verificar que se haya aplicado la configuración de su encabezado; es posible que la plataforma no le dé un error si un encabezado no es compatible.
Próximos pasos
Revise general vibe coding security checklist para ver 51 elementos de herramientas cruzadas. Luego consulte step-by-step hardening para conocer patrones más profundos en CSP, RLS y auth.
