seguridad

La lógica de permisos deja entrar a quien no debe

Tu app decide quién puede ver o hacer cada cosa en el código que corre en el navegador del visitante. El problema es que ese código está en su ordenador, no en el tuyo: puede leerlo, cambiarlo y saltárselo. Ocultar un botón no impide la acción que había detrás.

Revisado en agosto de 2026

De paso

Compruébalo en tu app ahora, gratis

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.

Diagnóstico

Por qué te pasa

Porque desde fuera funciona. Le pides a un agente que solo los administradores vean el panel de administración, y esconde el enlace cuando el usuario no es administrador. Tú lo pruebas con una cuenta normal, no ves el enlace, y das por hecho que está protegido. Y lo está a la vista, que no es lo mismo que estar protegido.

La confusión de fondo es razonable: en el navegador, esconder y bloquear parecen lo mismo. Pero el navegador es territorio del visitante. Todo lo que decida tu código allí lo puede cambiar quien esté al otro lado, y no hace falta ser un experto: cualquiera con curiosidad y una tarde puede llamar directamente a la dirección que había detrás del botón.

El caso más frecuente es la pantalla de administración accesible escribiendo su dirección a mano. El más caro es el que además guarda o modifica datos: si esa operación llega a tu base de datos sin que nadie compruebe permisos del lado del servidor, la comprobación del navegador no ha servido de nada.

Lo que este error no significa

  • No significa que esconder cosas esté mal. Está bien y hay que seguir haciéndolo: es lo que hace que la app sea comprensible. Solo que no cuenta como seguridad.
  • No significa que te hayan entrado. Significa que la puerta cede si alguien empuja, y la mayoría de los visitantes no empuja.
  • No significa rehacer la app. Normalmente se trata de añadir la comprobación que falta en el otro extremo, no de cambiar cómo funciona nada por delante.

Solución

Arréglalo tú, gratis

Lo bueno de este es que puedes comprobarlo tú mismo en cinco minutos, sin herramientas y sin saber programar. Y la prueba es concluyente: o cede o no cede.

  1. 01Inicia sesión en tu app con una cuenta normal, sin privilegios, y anota la dirección exacta de una pantalla que solo deberían ver los administradores. Si no la sabes, entra con la cuenta de administrador y cópiala de la barra del navegador.
  2. 02Con la cuenta normal, escribe esa dirección a mano en la barra y entra. Si la pantalla se abre, la protección era solo visual.
  3. 03Repite la prueba sin haber iniciado sesión en absoluto, en una ventana de incógnito. Es el escenario real: alguien que no es usuario tuyo.
  4. 04Si tu app tiene acciones sensibles, como borrar o cambiar el estado de algo, comprueba también qué pasa con los datos. Aquí es donde la seguridad por filas de Supabase te salva si está bien puesta: aunque alguien llegue a la pantalla, la base de datos debe negarse a servir o modificar lo que no le corresponde.
  5. 05Anota qué pantallas han cedido. Esa lista es exactamente lo que hay que arreglar, y va en el prompt de abajo.

Si al hacer la prueba la pantalla se abre pero sale vacía y sin datos, estás en una situación intermedia bastante mejor: la pantalla no está protegida, pero la base de datos sí. Hay que arreglarlo igual, pero no es una fuga de datos.

Y esto para la parte de código

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 tu agente

En mi app las comprobaciones de permisos se hacen en el navegador y creo que se pueden saltar escribiendo la dirección a mano.

Necesito que hagas esto:
1. Hazme un inventario de las pantallas y las acciones que deberían estar restringidas, y dime para cada una dónde se comprueba el permiso ahora mismo: en el navegador, en el servidor o en las políticas de la base de datos.
2. Señálame las que solo se comprueban en el navegador. Esas son las que ceden.
3. Para cada una, añade la comprobación en el lado que corresponda: si los datos vienen de Supabase, la protección real son las políticas de seguridad por filas; si hay funciones de servidor, la comprobación va dentro de la función, antes de hacer nada.
4. Mantén las comprobaciones del navegador tal como están: sirven para que la interfaz sea comprensible. Solo añade la capa que falta detrás.
5. Dime si alguna operación de escritura llega hoy a la base de datos sin ninguna comprobación de permisos por detrás. Eso es lo primero que quiero cerrar.

Escríbeme el SQL de las políticas que hagan falta para que lo revise, pero no lo apliques tú.

Si no sale

Si el escáner ha encontrado algo, no lo toques con prisa

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.

Las 10 primeras apps son gratis. Estoy empezando y necesito casos reales. A cambio te pido permiso para contar después qué me encontré, sin decir de quién era la app ni enseñar tus datos. Sin tarjeta y sin suscripción: cuando se acaben las plazas empezaré a cobrar y lo diré aquí.

Cita a partir de mañana

Agendar revisión

Gratis

durante el lanzamiento

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

Hoy, en cola prioritaria

Rescate exprés

Gratis

durante el lanzamiento

Entras en la cola de hoy. Reservas hueco y lo dejamos resuelto en el día.

  • Hueco el mismo día
  • Prioridad sobre las revisiones agendadas
  • Mismo trabajo, antes

Quién

Marc Sala

IT Manager

  • Analista de ciberseguridad certificado por Google

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, explicándote qué ha pasado sin jerga.