¿Es segura mi app? · Guías
Cómo saber si tu app de Supabase tiene la base de datos abierta
Si has hecho tu app con Lovable, Bolt, Cursor o v0 y usa Supabase, es muy probable que la clave de Supabase esté en el código de tu web. Eso es normal. Lo que no es normal es que, con esa clave, cualquiera pueda leer todas tus tablas.
Por qué pasa
Supabase da a tu web una clave pública llamada anon. Está pensada para estar en el navegador: lo que protege tus datos no es esa clave, sino Row Level Security (RLS), las reglas que dicen quién puede leer o escribir cada fila.
Si una tabla no tiene RLS activado, la clave anon da acceso a todas sus filas. Cualquiera puede abrir las herramientas de desarrollador del navegador, copiar la clave y descargar tus usuarios, pedidos o mensajes. Los generadores de código a veces crean tablas sin RLS para que la app “funcione ya”.
Cómo comprobarlo en 30 segundos
- Analiza tu web gratis en ¿Es segura mi app?. Si alguna tabla se puede leer sin iniciar sesión, aparece como “Tablas de Supabase legibles sin iniciar sesión” con el nombre de cada tabla. No descargamos ninguna fila: solo contamos si hay datos.
- En el panel de Supabase, abre Advisors → Security Advisor. Avisa de las tablas con RLS desactivado.
Cómo arreglarlo en 5 minutos
En el panel de Supabase, abre el SQL Editor. Primero activa RLS en cada tabla (cambia profiles por el nombre de la tuya):
alter table public.profiles enable row level security;
Con RLS activado y sin políticas, nadie puede leer nada con la clave anon. Después crea políticas para lo que sí debe poder hacer cada usuario. Por ejemplo, que cada usuario vea y edite solo su perfil:
create policy "Cada usuario ve su perfil"
on public.profiles for select
to authenticated
using ((select auth.uid()) = id);
create policy "Cada usuario edita su perfil"
on public.profiles for update
to authenticated
using ((select auth.uid()) = id);
Si una tabla debe ser pública de verdad (por ejemplo, un catálogo de productos), crea una política solo de lectura para ella y no permitas escribir.
El fallo que es todavía peor: la clave service_role
Supabase tiene una segunda clave, service_role, que se salta todas las reglas de RLS. Esa clave nunca debe estar en el navegador. Si nuestro análisis la encuentra, rótala en Settings → API y úsala solo en funciones del servidor.
Comprueba que ha funcionado
Vuelve a analizar tu web. Si las tablas ya no aparecen, está arreglado. Como cada nuevo cambio que haga la IA puede crear tablas nuevas, la Vigilancia repite el análisis cada semana y te manda el informe por email.