Seguridad, en lenguaje claro
Artículos breves sobre lo que de verdad falla en las apps hechas a golpe de intuición, y qué hacer al respecto.

New row violates row-level security policy en Supabase. ¿Y ahora?
"New row violates row-level security policy" significa que Supabase rechazó una escritura. El arreglo rápido vuelve a abrir la tabla para cualquiera.

¿Es un comodín CORS un riesgo de seguridad? Casi nunca.
¿Es un comodín CORS un riesgo de seguridad? Casi siempre es el ajuste por defecto de tu builder y no entrega nada que tu servidor no diera ya a cualquiera.

Supabase branching no es un backup. Solo va hacia adelante.
Por qué el branching de Supabase no es un backup: una rama arranca sin tus datos y un merge solo mueve el esquema. Para qué sirve y qué usar en su lugar.

Cómo restaurar un backup de Supabase, y qué se rompe después
Cómo restaurar un backup de Supabase desde el panel o desde un archivo de volcado, qué reemplaza la restauración y por qué tu app puede seguir rota al terminar.

Tu bucket de Supabase Storage es público. ¿Es un problema?
Un bucket público de Supabase Storage significa que quien tenga la URL de un archivo puede abrirlo. No significa que alguien pueda listar lo que hay dentro.

¿Es un problema una clave de API de Google en tu frontend?
Una clave de API de Google en tu frontend es la clave que más encuentra nuestro escáner, y casi siempre no pasa nada. Un ajuste gratuito decide cuál es cuál.

Un agente de IA borró mis datos de Supabase. ¿Qué puedo recuperar?
Un agente de IA borró datos de tu base. Lo que puedes recuperar ya estaba decidido antes de que se ejecutara, y los próximos minutos deciden el resto.

¿Puede cualquiera leer tu base de datos Supabase? 3.680 apps
¿Puede cualquiera leer tu base de datos Supabase sin iniciar sesión? Escaneamos 30.998 apps activas hechas con builders de IA y medimos cuántas dicen que sí.

Source maps expuestos: tu app está publicando su código original
Un source map expuesto deja que cualquiera lea el código original de tu app, comentarios incluidos. La comprobación de 30 segundos y lo que de verdad importa.

Las nuevas claves de API de Supabase: ¿cuál va en tu app?
Supabase sustituyó anon y service_role por claves publicables y secretas. ¿Cuál pertenece a tu app y cuál no debe estar nunca?

¿Supabase respalda mi base de datos? Depende de tu plan.
¿Supabase respalda tu base de datos? A diario en los planes de pago, y nada en el gratuito. Cómo saber cuál tienes y qué es lo que esa copia no cubre.

Supabase Row Level Security está activado. Tu tabla sigue pública.
Activar Supabase Row Level Security no protege una tabla. Lo hacen tus políticas, y la que arregló tu app rota puede dejar entrar a cualquiera.

El historial de versiones no es un backup. No recupera una tabla.
Lovable y Bolt guardan un historial de versiones de tu código. Tu base de datos es un servicio aparte, y volver atrás no te devuelve tus datos.

Tres formas de respaldar una base Supabase, y qué falta en cada una
El panel, pg_dump y un servicio gestionado. Qué guarda de verdad cada uno, qué deja fuera sin avisar y cuál sobrevive a perder la cuenta.

Qué claves de API son seguras en el navegador y cuáles no
Tu clave anon de Supabase está pensada para ser pública. Tu clave service_role no, y se salta todas las reglas que pongas. Cómo distinguirlas.
Todo lo de aquí lo escribe un experto en seguridad, y está dirigido a quien pulsó publicar.
Vlad Tkachenko