Cita a partir de mañana
Agendar revisión
99 €
Elegimos hueco, miro tu app con calma y te digo qué pasa y cómo se arregla.
- Sesión de trabajo en directo contigo
- Diagnóstico del error y del riesgo real
- Te quedas con el arreglo aplicado
Supabase te da dos llaves. Una es pública y va en el navegador a propósito. La otra, la service_role, se salta todas las reglas de seguridad de tu base de datos y solo debe vivir en un servidor. La segunda ha acabado dentro del código que se descarga cualquiera que visite tu web.
Esto no da la cara solo: tu app funciona igual de bien esté abierta o cerrada. La única forma de saberlo es mirar.
Solo leemos lo que tu app ya le entrega a cualquier visitante.
Casi nunca es un despiste tonto: es la salida más rápida a un problema real. En algún momento tu app necesitó hacer algo que las políticas de seguridad no le dejaban, saltó un error, y la forma más rápida de que ese error desapareciera fue usar la llave que se salta las políticas. Funcionó. Y como funcionó, se quedó.
También ocurre al copiar. En el panel de Supabase las dos claves están una debajo de la otra, con nombres parecidos y el mismo aspecto de cadena larguísima. Si coges la de abajo en vez de la de arriba, tu app funciona exactamente igual de bien, y ahí está la trampa: no hay ningún síntoma. Nada falla, nada avisa, y el problema puede llevar meses ahí.
Lo que la hace peligrosa es lo que significa técnicamente: no es una contraseña más, es la credencial que Supabase reserva para el servidor precisamente porque ignora todas las políticas que hayas escrito. Da igual lo bien configurada que tengas la seguridad por filas: esta llave pasa por encima de toda ella.
Aquí el orden importa más que la prisa, y es la razón por la que mucha gente empeora las cosas: si revocas la clave antes de tener el reemplazo colocado, tu app se cae; si despliegas antes de revocar, la clave sigue siendo válida un rato más. Este es el orden que no rompe nada.
Si tu proyecto usa el sistema antiguo de claves y no te deja tener dos activas a la vez, el orden cambia: hay que preparar el despliegue de antemano y rotar y desplegar casi seguidos, asumiendo unos minutos de caída. Ese es el caso en el que más gente se atasca.
Pégaselo tal cual al agente que escribió tu app. Está redactado para que te diga lo que ha hecho, no solo para que lo haga.
Prompt para pegarle a tu agente
En mi app ha acabado publicada la clave service_role de Supabase en el código que llega al navegador. Necesito que hagas esto, y en este orden: 1. Búscala en todo el proyecto y dime en qué ficheros aparece y con qué nombre de variable, sin pegarme la clave entera en la respuesta. 2. Por cada uso, explícame qué está haciendo ahí y por qué hacía falta saltarse las políticas de seguridad. Esto es lo importante: quiero entender qué operación no funcionaba con la clave pública. 3. Propón para cada uno de esos usos una alternativa que no necesite la llave maestra en el navegador: o una política de seguridad por filas que permita esa operación concreta, o mover esa operación a una función de servidor. 4. Deja el código preparado para leer la clave nueva desde una variable de entorno de servidor, sin prefijo VITE_ ni NEXT_PUBLIC_ bajo ningún concepto. No revoques ni cambies ninguna clave tú, y no me digas que basta con borrar la línea: la clave ya es pública y la rotación la hago yo en el panel, en un orden concreto.
Cerrar una puerta abierta tiene un orden: primero se corta el acceso, después se comprueba en los registros si alguien entró, y solo entonces se despliega. Hacerlo al revés deja la app caída y borra el rastro de lo que pasó. Si prefieres no hacerlo solo, elige cuándo lo hacemos.
Cita a partir de mañana
99 €
Elegimos hueco, miro tu app con calma y te digo qué pasa y cómo se arregla.
Hoy, en cola prioritaria
199 €
Entras en la cola de hoy. Reservas hueco y lo dejamos resuelto en el día.
Marc Sala
IT Manager
No es un rating anónimo de un marketplace: es la persona que va a entrar en tu app. Reviso el código, encuentro qué falla y lo arreglo contigo delante.