Revise su proyecto de Supabase con 45 reglas de OWASP Top 10:2025 y más
Conecte un proyecto en solo lectura y obtenga un informe con nota y la corrección de cada hallazgo, en esta misma página.
Para equipos que crean con Lovable, Bolt, Cursor o v0 sobre Supabase. Gratis, sin registro.
Gratis, sin registro. Solo lectura: no se cambia nada en su proyecto.
- Conecte SupabaseApruebe el acceso de solo lectura en supabase.com.
- Ejecutamos 45 comprobacionesAcceso y RLS, inicio de sesión, storage y funciones, infraestructura. Solo el catálogo y los ajustes, nunca sus filas.
- Informe y un prompt para su agente de IAUna corrección para cada hallazgo y un prompt que pega en Cursor, Claude Code o Lovable. Solo se guarda si lo comparte.
Cargando sus proyectos de Supabase…
Elija un proyecto para analizar
20 letras minúsculas, como en supabase.com/dashboard/project/su-referencia.
Confirme que es una persona
Así se mantienen los análisis automáticos fuera del servicio.
Registro del análisis
Qué puede ver la comprobación
Leemos
- Catálogo de la base de datos: tablas, indicadores de RLS, políticas, permisos, vistas, funciones, extensiones, roles y quién puede leer el Vault
- Ajustes de auth: reglas de contraseña, confirmación de correo, MFA, URL de redirección
- Storage: la lista de buckets, cuáles son públicos y sus límites de tamaño y tipo de archivo
- Edge Functions: la lista y el ajuste de JWT de cada una
- Ajustes del proyecto: versión de Postgres, copias de seguridad, SSL, restricciones de red, límite de filas de la Data API
Nunca leemos
- Las filas de sus tablas
- Claves de API y secretos: Supabase incluye algunos en las respuestas de configuración, y el análisis los descarta al llegar, sin guardarlos, registrarlos ni mostrarlos
- Los archivos guardados en sus buckets
- El código de su aplicación y su repositorio
Un informe solo se guarda cuando crea un enlace para compartirlo, como máximo 7 días. El acceso concedido se revoca justo después de la comprobación.
Lo que el acceso de lectura no puede comprobar
- A06 Diseño inseguro y A10 Gestión incorrecta de condiciones excepcionales están en el código de su aplicación, no en los ajustes del proyecto.
- Las dependencias del frontend (la parte de npm de A03) y una clave service_role incluida en el código del frontend. Revise su repositorio.
- Reglas de acceso que viven solo en el código de la app o en Edge Functions, como una comprobación plan = 'pro' en el frontend. El análisis solo ve columnas que la propia base de datos usa en políticas, funciones y auth hooks, así que superar la comprobación de columnas de acceso editables no significa que esas columnas sean seguras.
- Si un usuario con sesión iniciada puede leer las filas de otro usuario. Eso requiere una prueba con dos usuarios reales: cómo probar RLS en Supabase
Supabase Security Advisor y esta comprobación
| Pregunta | Security Advisor | Esta comprobación |
|---|---|---|
| Dónde se ejecuta | En el panel de Supabase, un proyecto cada vez | En esta página, tras un OAuth de solo lectura, para el proyecto que elija |
| Qué lee | Lints de la base de datos | Los mismos lints como una sola comprobación, más auth, storage, Edge Functions, copias de seguridad y ajustes de red |
| Cómo se agrupan los resultados | Por lint | Por OWASP Top 10:2025, indicando las categorías que no puede comprobar |
| Qué recibe para corregirlo | Un enlace a la documentación del lint | SQL o el ajuste del panel por cada hallazgo, y un prompt para su agente de IA |
| Qué puede conservar | La lista en su panel | Un PDF, o un enlace compartido que caduca a los 7 días |
Cobertura de OWASP Top 10:2025
| Categoría | Comprobaciones | Estado |
|---|---|---|
| A01 Control de acceso roto | 18 | Cubierta |
| A02 Configuración de seguridad incorrecta | 9 | Cubierta |
| A03 Fallos en la cadena de suministro de software | 2 | Parcial Solo la versión de Postgres y las extensiones. Las dependencias de npm están en su repositorio. |
| A04 Fallos criptográficos | 4 | Cubierta |
| A05 Inyección | 1 | Cubierta |
| A06 Diseño inseguro | 0 | No comprobable El diseño inseguro está en cómo funciona su aplicación, no en los ajustes. |
| A07 Fallos de autenticación | 8 | Cubierta |
| A08 Fallos de integridad de software o datos | 1 | Cubierta |
| A09 Fallos de registro y alertas de seguridad | 2 | Cubierta |
| A10 Gestión incorrecta de condiciones excepcionales | 0 | No comprobable La gestión de errores está en el código de su aplicación, que el acceso de lectura nunca ve. |
Las 45 comprobaciones
| Comprobación | ID | OWASP | Peor caso |
|---|---|---|---|
| RLS desactivado en tablas expuestas | rls_disabled_exposed | A01 | Crítica |
| Políticas que permiten todas las filas | policy_always_true | A01 | Alta |
| Políticas que confían en los metadatos del usuario | policy_uses_user_metadata | A01 | Alta |
| Políticas de escritura abiertas a visitantes anónimos | anon_write_policies | A01 | Alta |
| Vistas que se saltan RLS | views_without_security_invoker | A01 | Alta |
| Vistas materializadas o tablas foráneas en la API | matviews_or_foreign_tables_exposed | A01 | Media |
| Funciones security definer invocables desde la API | security_definer_executable | A01 | Alta |
| Políticas de storage abiertas a visitantes anónimos | storage_objects_anon_policies | A01 | Alta |
| Buckets de storage públicos | public_buckets | A01 | Baja |
| Canales privados de Realtime sin protección | realtime_messages_rls | A01 | Alta |
| Permisos de escritura sin uso para visitantes anónimos | anon_table_grants_write | A01 | Baja |
| Roles que eluden RLS | roles_bypass_rls | A01 | Alta |
| Columnas de acceso que los usuarios con sesión pueden cambiar | authz_columns_writable | A01 | Alta |
| Borrar y volver a insertar cambia una columna protegida | delete_insert_bypass | A01 | Alta |
| Privilegios de tabla innecesarios para usuarios con sesión | authenticated_table_grants_extra | A01 | Baja |
| Privilegios por defecto que abren objetos nuevos a la API | default_privileges_api_roles | A01 | Baja |
| Funciones security definer que comprueban current_user | definer_checks_current_user | A01 | Media |
| Políticas sin rol o sin comando | policies_without_to_or_for | A01 | Baja |
| Hallazgos del Security Advisor de Supabase | advisor_lints | A02 | Alta |
| Esquemas adicionales expuestos en la Data API | extra_exposed_schemas | A02 | Alta |
| Comodines en las URL de redirección | redirect_wildcards | A02 | Media |
| URL de redirección por http o a localhost | insecure_redirect_urls | A02 | Media |
| Inicios de sesión anónimos activados | anonymous_signins_enabled | A02 | Media |
| CAPTCHA desactivado en el registro y el inicio de sesión | captcha_disabled | A02 | Media |
| Base de datos abierta a cualquier dirección IP | network_open | A02 | Media |
| Buckets públicos sin límites de subida | public_bucket_no_limits | A02 | Baja |
| Sin límite de filas en las respuestas de la Data API | postgrest_max_rows | A02 | Media |
| Actualización de Postgres disponible | postgres_upgrade_available | A03 | Media |
| Extensiones instaladas | extensions_listed | A03 | Info |
| SSL no obligatorio en las conexiones a la base de datos | ssl_enforcement_off | A04 | Media |
| Tokens de acceso válidos más de una hora | jwt_expiry_long | A04 | Media |
| Columnas de apariencia sensible legibles por visitantes anónimos | sensitive_columns_exposed | A04 | Alta |
| Secretos de Vault legibles por roles de la API | vault_secrets_exposed | A04 | Crítica |
| SQL dinámico construido con cadenas | dynamic_sql_concat | A05 | Media |
| Longitud mínima de contraseña corta | password_min_length | A07 | Alta |
| Protección contra contraseñas filtradas desactivada | leaked_password_protection_off | A07 | Media |
| Confirmación de correo desactivada | email_confirm_off | A07 | Alta |
| Cambio de correo seguro desactivado | secure_email_change_off | A07 | Media |
| Códigos de un solo uso válidos más de una hora | otp_expiry_long | A07 | Media |
| Ningún método multifactor activado | mfa_unavailable | A07 | Media |
| Rotación de refresh tokens desactivada | refresh_token_rotation_off | A07 | Media |
| Cambio de contraseña sin reautenticación | password_change_no_reauth | A07 | Baja |
| Edge Functions sin verificación de JWT | edge_functions_without_jwt | A08 | Baja |
| pgaudit no instalado | pgaudit_missing | A09 | Info |
| No se encontraron copias de seguridad | backups_or_pitr | A09 | Media |
Preguntas
¿En qué se diferencia del Security Advisor de Supabase?
Los resultados del Security Advisor son una de las comprobaciones. El análisis añade los ajustes de auth, las políticas de storage, las Edge Functions, las copias de seguridad y los ajustes de red, agrupa todo según OWASP Top 10:2025 y da una corrección para cada hallazgo.
¿Es Supabase seguro por defecto?
La plataforma la mantiene Supabase, pero las reglas de acceso son suyas. Una tabla nueva creada con SQL simple tiene Row Level Security desactivado, y una política escrita como using (true) permite que cualquiera con la clave anon lea la tabla. El análisis busca exactamente estos ajustes.
¿Qué significa «RLS desactivado» y cómo se activa?
Con RLS desactivado en una tabla de un esquema expuesto, cualquiera con su clave anon puede leer todas las filas a través de la Data API. Actívelo con alter table public.su_tabla enable row level security; y añada después las políticas del acceso que quiera.
¿Es seguro que mi clave anon de Supabase esté en el navegador?
Sí, la clave anon (publicable) está pensada para ser pública. Solo puede hacer lo que permitan sus permisos y sus políticas de RLS, y por eso el análisis los comprueba. La clave service_role se salta RLS y nunca debe llegar al navegador.
Revise su propio proyecto
Gratis y de solo lectura. El informe aparece en esta página.
Revisar mi proyecto de Supabase