Ir al contenido

Cualquiera puede leer tu base de datos Supabase

Crítico Todo el dominio Seguridad

Instrucciones generales. Abre este artículo desde tu informe de PageCheck para verlo completado con los registros de tu dominio y los pasos exactos de tu proveedor de DNS.

Qué es

Su sitio guarda su contenido en una base de datos de Supabase. La página accede a esa base de datos con una clave pública que forma parte del código de la página, por lo que el navegador de cada visitante la tiene. Esa clave está pensada para ser pública: lo que protege los datos son las reglas de acceso de cada tabla (Supabase lo llama Row Level Security).

Qué falla

Tu base de datos Supabase responde a la clave pública y lista sus tablas, así que Row Level Security está desactivado o incompleto. Cualquiera que abra tu sitio puede leer, y a menudo cambiar o borrar, los datos que hay detrás.

Cómo arreglarlo

1. Active las reglas de acceso de cada tabla. En el panel de Supabase, abra Authentication → Policies (o Table editor → cada tabla → Row Level Security) y active Row Level Security en todas las tablas del esquema public. Con ella activada y sin ninguna policy, la clave pública no puede leer nada.

2. Añada una policy solo para lo que el público necesita. Si una parte de una tabla debe ser realmente pública (por ejemplo, una lista de productos), añada una policy que permita leer solo esas filas y columnas. Todo lo demás sigue siendo privado y solo se accede a ello desde su propio código de servidor, que usa una clave secreta, nunca la clave que va en la página.

3. Compruébelo desde fuera. Abra su sitio en una ventana de navegación privada y confirme que sigue funcionando; después vuelva a ejecutar esta comprobación. No necesita cambiar la clave pública: está pensada para ser pública; lo que protege los datos son las reglas de acceso.

Lock down my Supabase database: it is readable with the public anon key because Row Level Security is off.
Project: <my .supabase.co project>.

Steps:
1. List every table in the public schema and tell me which, if any, genuinely need to be readable by anonymous visitors.
2. Enable Row Level Security on every table in the public schema.
3. For the tables that must be public, add the narrowest SELECT policy that serves the site (only the needed rows and columns); leave the rest with no anon policy.
4. Make sure the app reads private data only through server-side code using the service_role key, never the anon key in the browser.
5. Give me the SQL for the policies and the exact dashboard steps, and tell me how to verify from an anonymous client that the private tables return nothing.
Do not rotate the anon key — it is public by design; the fix is the access rules.

Revisa tu sitio para ver si tiene este problema. Revisar un sitio web