[{"data":1,"prerenderedAt":653},["ShallowReactive",2],{"blog-es-is-supabase-secure":3,"blog-index-es":411},{"id":4,"title":5,"body":6,"category":367,"cover":368,"coverAlt":369,"description":370,"draft":371,"extension":372,"faq":373,"image":391,"keywords":392,"meta":400,"navigation":401,"ogTitle":25,"path":402,"published":403,"seo":404,"stem":405,"tldr":406,"updated":403,"__hash__":410},"blog_es\u002Fblog\u002Fis-supabase-secure.md","¿Supabase es seguro? Sí. Tu proyecto es otra pregunta",{"type":7,"value":8,"toc":355},"minimark",[9,13,21,26,29,40,43,46,50,53,59,68,71,77,80,84,87,90,93,101,108,112,115,235,238,242,245,251,262,272,277,287,291,313,325,332,336,339,342,345,348],[10,11,12],"p",{},"Alguien te dijo que Supabase no vale para datos reales de usuarios. Otro te dijo\nque está debajo de la mitad de las apps de las que has oído hablar este año.\nLos dos estaban seguros, y ninguno de los dos había abierto tu app.",[10,14,15,16,20],{},"Aquí está la parte que guía tras guía se equivoca: ",[17,18,19],"strong",{},"\"¿Supabase es seguro?\" y\n\"¿mi proyecto de Supabase es seguro?\" las responden dos personas distintas.","\nSupabase responde la primera, y la responde bien. La segunda es tuya, te haya\ndicho alguien o no que te la habían pasado.",[22,23,25],"h2",{"id":24},"supabase-es-seguro","¿Supabase es seguro?",[10,27,28],{},"Sí. Auditores externos han examinado la plataforma, y sus certificaciones\nconstan por escrito.",[10,30,31,32,39],{},"Supabase cumple SOC 2 Type 2 y está certificado en ISO 27001. Los datos de\nclientes se cifran en reposo con AES-256 y en tránsito con TLS. Hay una oferta\nHIPAA para datos de salud, que necesita un add-on y un acuerdo firmado. Hacen\npruebas de penetración periódicas con expertos externos, y lo publican todo en\n",[33,34,38],"a",{"href":35,"rel":36},"https:\u002F\u002Fsupabase.com\u002Fsecurity",[37],"nofollow","su página de seguridad",".",[10,41,42],{},"Piénsalo como un edificio. Los cimientos aguantan, las puertas cortafuegos\nfuncionan, hay un guardia en la entrada, y en la pared cuelga un certificado de\nalguien que vino a revisarlo. Eso es de verdad lo que estás comprando.",[10,44,45],{},"Tu proyecto es un piso dentro de ese edificio.",[22,47,49],{"id":48},"qué-cubre-en-realidad-ese-certificado","¿Qué cubre en realidad ese certificado?",[10,51,52],{},"El edificio. Supabase escribe la frontera en una sola frase, en su propia\ndocumentación SOC 2:",[54,55,56],"blockquote",{},[10,57,58],{},"El cumplimiento SOC 2 de Supabase no se transfiere a entornos fuera del\nproducto Supabase o del control de Supabase.",[10,60,61,62,67],{},"La misma página añade que los datos del lado del cliente de esa frontera son\nresponsabilidad del cliente, y su\n",[33,63,66],{"href":64,"rel":65},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fdeployment\u002Fshared-responsibility-model",[37],"modelo de responsabilidad compartida","\ndetalla qué lado es cuál. Supabase lleva la infraestructura, el sistema\noperativo, las actualizaciones de Postgres y la monitorización de la plataforma.\nTu lado tiene tu cuenta y quién accede a ella, tus datos, los secretos de tu\nbase de datos y las claves de API, y Row Level Security, que esa misma página te\nrecomienda aplicar siempre.",[10,69,70],{},"Ese último punto es todo este artículo. Row Level Security es la regla en cada\ntabla que dice quién puede leer qué filas. Está apagada hasta que alguien la\nenciende, y encenderla ocurre dentro de tu proyecto, en una página que quizá no\nhas abierto nunca.",[72,73],"diagram",{"alt":74,"caption":75,"src":76},"Dos recintos, uno dentro del otro. El muro exterior es macizo, lleva un tick y una placa de SOC 2; una petición atraviesa su puerta vigilada. El muro interior, etiquetado RLS, tiene un hueco, y la petición sigue por ese hueco hasta una pila de filas de base de datos.","El muro exterior está revisado y certificado. La petición que llega a tus filas entró por un hueco del muro de dentro, que es el que dibuja tu proyecto.","\u002Fblog\u002Fis-supabase-secure\u002Fwhere-the-certificate-stops-1600x760.png",[10,78,79],{},"El certificado es del edificio. Lo único que hace la plataforma con los pisos es\nseñalar las puertas: el Security Advisor de tu panel nombra cada tabla con la\nregla apagada, y te deja a ti la decisión.",[22,81,83],{"id":82},"entonces-por-qué-tantas-apps-de-supabase-filtran-datos","¿Entonces por qué tantas apps de Supabase filtran datos?",[10,85,86],{},"Porque todo lo que hay de tu lado de esa línea sigue funcionando perfectamente\nmientras está abierto de par en par.",[10,88,89],{},"En agosto de 2026 escaneamos 30.998 apps en vivo hechas con Lovable, Base44,\nReplit, v0 y Bolt. En 3.680 de ellas pudimos completar la comprobación que\npregunta a una base de datos, sin ningún login, si va a entregar filas. 2.096\ndijeron que sí en al menos una tabla. Storage contó la misma historia desde otro\nángulo: de las 27.269 apps que pudimos comprobar, 792 tenían un bucket que un\ndesconocido podía listar.",[10,91,92],{},"Nada de eso fue un fallo de Supabase. Cada una de esas respuestas salió de una\nbase de datos parcheada y cifrada sobre una plataforma certificada, haciendo\nexactamente lo que su propio proyecto le había dicho. El edificio estaba bien.\nLas puertas de dentro estaban abiertas.",[10,94,95,96,100],{},"Pasa por el orden en que se construyen las cosas. Tu app funciona desde el\nprimer día, y funciona con las reglas escritas o sin ellas, así que no hay un\nmomento en que algo se rompa y te haga mirar. La\n",[33,97,99],{"href":98},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","medición completa"," explica cuánto\nde eso pudimos ver y cuánto no.",[10,102,103,104,39],{},"Si quieres la respuesta para tu propia app en vez de para la plataforma, nuestro\nescaneo gratis hace la misma petición anónima desde fuera y te dice cuáles de\ntus tablas respondieron. Unos 20 segundos, sin cuenta:\n",[33,105,107],{"href":106},"\u002F#scan","escanea tu app",[22,109,111],{"id":110},"supabase-es-seguro-para-producción","¿Supabase es seguro para producción?",[10,113,114],{},"Sí, y lo que tienes que hacer al respecto es corto, porque Supabase ya hizo la\nmitad larga.",[116,117,118,134],"table",{},[119,120,121],"thead",{},[122,123,124,128,131],"tr",{},[125,126,127],"th",{},"Asunto",[125,129,130],{},"Quién se ocupa",[125,132,133],{},"Qué significa para ti",[135,136,137,149,158,167,177,190,211,223],"tbody",{},[122,138,139,143,146],{},[140,141,142],"td",{},"Parches de servidor, actualizaciones de Postgres, SO",[140,144,145],{},"Supabase",[140,147,148],{},"Nada que hacer",[122,150,151,154,156],{},[140,152,153],{},"Cifrado en reposo y en tránsito",[140,155,145],{},[140,157,148],{},[122,159,160,163,165],{},[140,161,162],{},"Seguridad física, seguridad de red, pentests",[140,164,145],{},[140,166,148],{},[122,168,169,172,174],{},[140,170,171],{},"Copias de tu base de datos",[140,173,145],{},[140,175,176],{},"Diarias en plan de pago, y ninguna en el gratuito. Mira en cuál estás",[122,178,179,182,187],{},[140,180,181],{},"Qué filas puede leer un visitante",[140,183,184],{},[17,185,186],{},"Tú",[140,188,189],{},"Una política de Row Level Security en cada tabla con datos reales",[122,191,192,195,199],{},[140,193,194],{},"Qué clave acabó dentro de tu app",[140,196,197],{},[17,198,186],{},[140,200,201,202,206,207,210],{},"La clave publicable va ahí. ",[203,204,205],"code",{},"service_role"," y ",[203,208,209],{},"sb_secret_"," nunca",[122,212,213,216,220],{},[140,214,215],{},"Qué archivos puede listar un desconocido",[140,217,218],{},[17,219,186],{},[140,221,222],{},"El interruptor público de cada bucket, separado de las reglas de tus tablas",[122,224,225,228,232],{},[140,226,227],{},"Quién puede entrar en tu cuenta de Supabase",[140,229,230],{},[17,231,186],{},[140,233,234],{},"Una contraseña que no tenga nadie más, y doble factor en la cuenta",[10,236,237],{},"Cada fila de la mitad de abajo es un ajuste, y cada ajuste son unos minutos en\nun panel. La plataforma llega lista para producción. La configuración llega en\nel estado en que la dejó tu builder.",[22,239,241],{"id":240},"cómo-compruebo-mi-propio-proyecto","¿Cómo compruebo mi propio proyecto?",[10,243,244],{},"Tres sitios, y ninguno te pide leer una línea de SQL.",[10,246,247,250],{},[17,248,249],{},"Abre el Security Advisor en tu panel de Supabase."," Lista cada tabla con Row\nLevel Security apagado, que es la versión más burda de este problema, y Supabase\nes bueno señalándolo. Un proyecto con esa lista vacía ha resuelto la primera\npregunta.",[10,252,253,256,257,261],{},[17,254,255],{},"Luego lee la política de cualquier tabla que guarde personas."," El Advisor no\npuede decidir si una política permisiva fue a propósito, porque en un catálogo\nde productos sería lo correcto. Una tabla puede tener el interruptor puesto, una\npolítica válida y un tick verde en el panel, y aun así entregar sus filas a\ncualquiera que pregunte;\n",[33,258,260],{"href":259},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","los cuatro estados en los que puede estar una tabla","\nexplican cómo distinguir el tuyo.",[10,263,264,267,268,39],{},[17,265,266],{},"Luego mira Storage."," Los buckets tienen sus propios ajustes y las reglas de\ntus tablas no llegan hasta ahí, así que una base de datos bien cerrada no te\ndice nada sobre\n",[33,269,271],{"href":270},"\u002Fblog\u002Fsupabase-storage-bucket-public","los archivos que subieron tus usuarios",[72,273],{"alt":274,"caption":275,"src":276},"Un muro exterior grueso con una placa de SOC 2 marcada con un tick cruza el fondo. Delante hay un recinto más pequeño con tres puertas, cada una etiquetada en monoespaciada: RLS, public y service_role.","El muro de detrás lo revisa otro. Estos tres pomos están dentro de tu propio proyecto, y cada uno es una página de tu panel.","\u002Fblog\u002Fis-supabase-secure\u002Fthree-doors-you-own-1600x700.png",[10,278,279,280,284,285,39],{},"Hay una cuarta pregunta que el panel no puede responder: qué clave acabó\nrealmente dentro de tu app. La página de ajustes lista las claves que tiene tu\nproyecto, y tu app es el único sitio donde consta cuál de ellas entró. Leer la\nclave en tu propia página en vivo es\n",[33,281,283],{"href":282},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","cosa de dos minutos",", o nuestro\nescaneo gratis la lee por ti junto con todo lo anterior:\n",[33,286,107],{"href":106},[22,288,290],{"id":289},"qué-hacer-ahora","Qué hacer ahora",[292,293,294],"key-takeaways",{},[295,296,297,301,304,307,310],"ul",{},[298,299,300],"li",{},"Deja de preguntar si Supabase es seguro. Lo es, con un informe SOC 2 Type 2, ISO 27001, cifrado AES-256 en reposo y pruebas de penetración periódicas detrás de la afirmación.",[298,302,303],{},"Lee la frontera en sus propias palabras. El cumplimiento cubre el producto Supabase, y tus políticas de Row Level Security, tus claves y tus buckets están de tu lado.",[298,305,306],{},"Abre el Security Advisor primero. Cuesta un minuto y responde la versión más burda de la pregunta.",[298,308,309],{},"Lee la política de cada tabla que guarde personas, porque una política permisiva se ve en el panel como una tabla protegida.",[298,311,312],{},"Comprueba Storage aparte de tus tablas. Los dos tienen ajustes distintos y una base de datos estricta no dice nada sobre tus archivos.",[10,314,315,316,320,321,39],{},"Si prefieres recorrerlo todo como una lista, el\n",[33,317,319],{"href":318},"\u002Fchecklist","checklist de seguridad de 10 minutos"," cubre esto junto a los demás\najustes que conviene cerrar en una app recién lanzada, y hay una explicación en\nlenguaje llano para ",[33,322,324],{"href":323},"\u002Fis-your-supabase-app-safe","apps de Supabase",[10,326,327,328,39],{},"Recorrer esa lista es una tarde, y la respuesta que te da es cierta la tarde en\nque lo haces. Mantenerla cierta es la parte que no cabe en una tarde, y para eso\nconstruimos Reeve Care: repite esas mismas comprobaciones sobre tu app según un\ncalendario y te escribe cuando alguna empieza a responder distinto.\n",[33,329,331],{"href":330},"\u002F#pricing","Qué vigila y cuánto cuesta",[22,333,335],{"id":334},"reeve-guarda-una-copia-de-tu-base-de-datos-de-supabase","Reeve guarda una copia de tu base de datos de Supabase",[10,337,338],{},"Fuera de la cuenta de la que salió, según un calendario, y verificada antes de\ncontar. La primera de esas tres es la que las copias del propio Supabase no\npueden hacer por ti.",[10,340,341],{},"Supabase hace una copia diaria en plan de pago y ninguna en el gratuito, y en\nambos casos esa copia vive dentro del proyecto del que se sacó. Es la\nherramienta correcta para la tarde en que rompes tus propios datos. Queda fuera\nde alcance el día en que el problema es la cuenta misma: un pago que falla, un\nborrado, un acceso al que ya nadie entra.",[10,343,344],{},"Reeve Care guarda una copia en otro sitio. Tomada según el calendario que marca\ntu plan, cifrada antes de salir de la máquina que la hizo, y releída y\ncomprobada antes de que la contemos siquiera como copia, para que la fecha de tu\npanel sea la fecha en que se demostró que existía una copia y no la fecha en que\narrancó un trabajo. Cubre tu base de datos de Supabase, y los archivos que\nsubieron tus usuarios en cuanto los conectas.",[10,346,347],{},"Una restauración hace tres cosas alrededor de la reposición en sí. Comprueba que\nla copia todavía encaja en tu base de datos antes de devolver una sola fila,\ntoma primero una instantánea de seguridad de lo que hay ahora, y demuestra\ndespués que la base de datos admite escritura escribiendo en ella, porque una\nrestauración que te deja en solo lectura no ha terminado. También puedes\ndescargar cualquier copia que tengamos y llevártela.",[10,349,350,351,39],{},"Cada comprobación de esta página te dice dónde está tu app hoy. Las copias son\npara el día en que algo ya ha salido mal.\n",[33,352,354],{"href":353},"\u002Fsupabase-backups","Qué copia Reeve en Supabase, con qué frecuencia, y qué hace una restauración",{"title":356,"searchDepth":357,"depth":357,"links":358},"",3,[359,361,362,363,364,365,366],{"id":24,"depth":360,"text":25},2,{"id":48,"depth":360,"text":49},{"id":82,"depth":360,"text":83},{"id":110,"depth":360,"text":111},{"id":240,"depth":360,"text":241},{"id":289,"depth":360,"text":290},{"id":334,"depth":360,"text":335},"Fundamentos de seguridad","\u002Fblog\u002Fis-supabase-secure\u002Fcover-1200x630.png","Un edificio de ventanas iluminadas con una hoja abierta en un piso alto, que deja un hueco oscuro en una fachada por lo demás cerrada.","¿Supabase es seguro? La plataforma está auditada, cifrada y sometida a pentests. Su propia documentación dice dónde termina eso y empiezan tus ajustes.",false,"md",[374,377,380,383,385,388],{"q":375,"a":376},"¿Supabase es lo bastante seguro para datos reales de clientes?","Sí. Supabase cumple SOC 2 Type 2 y está certificado en ISO 27001, cifra los datos de clientes en reposo con AES-256 y en tránsito con TLS, y hace pruebas de penetración periódicas. Lo que eso no te dice es si las reglas dentro de tu propio proyecto dejan que un desconocido lea tus tablas, porque ese ajuste pertenece a tu proyecto y no a la plataforma.",{"q":378,"a":379},"¿Supabase cumple SOC 2?","Sí, SOC 2 Type 2. Los clientes de Enterprise y Team pueden pedir el informe desde su panel. El alcance es el producto Supabase en sí: su infraestructura, sus controles, su monitorización.",{"q":381,"a":382},"¿El informe SOC 2 de Supabase cubre mi app?","No, y Supabase lo dice por escrito. Su documentación SOC 2 afirma que el cumplimiento no se transfiere a entornos fuera del producto Supabase o del control de Supabase, y que los datos del lado del cliente de esa frontera son responsabilidad del cliente. Tus políticas de Row Level Security, tus claves de API y tus ajustes de Storage están todos de tu lado.",{"q":111,"a":384},"Sí, y el trabajo de tu lado es corto. Activa Row Level Security en cada tabla con datos reales y escribe una política que nombre una condición, mantén la clave secreta fuera de todo lo que descargan tus visitantes, y mira qué buckets de Storage están marcados como públicos. Esos tres ajustes deciden si un desconocido llega a tus datos, y son por donde empezamos cuando escaneamos una app.",{"q":386,"a":387},"¿Supabase cumple HIPAA?","Supabase ofrece cumplimiento HIPAA, y no viene activado solo. Requiere el add-on de HIPAA y un Business Associate Agreement firmado, y su documentación es explícita en que SOC 2 no lo sustituye. La información sanitaria protegida trae además reglas sobre dónde puedes ponerla, entre ellas la instrucción de no guardarla en buckets públicos de Storage.",{"q":389,"a":390},"¿Supabase es más seguro que montar mi propio backend?","En las partes que lleva Supabase, casi con seguridad. Parchear servidores, actualizar la base de datos, cifrar en reposo, la seguridad de red y un régimen de accesos auditado son cosas que rara vez hace igual de a fondo alguien que trabaja solo. Las partes que siguen siendo tuyas son las mismas en ambos casos, y con tu propio backend hay una más: el código entre tu app y tu base de datos.","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",[393,394,395,396,397,398,399],"supabase es seguro","es seguro supabase","que tan seguro es supabase","seguridad de supabase","supabase es seguro para produccion","supabase shared responsibility model","supabase soc 2",{},true,"\u002Fblog\u002Fis-supabase-secure","2026-08-29",{"title":5,"description":370},"blog\u002Fis-supabase-secure",[407,408,409],"¿Supabase es seguro? La plataforma sí: SOC 2 Type 2, ISO 27001, AES-256 en reposo, TLS en tránsito y pruebas de penetración periódicas.","La propia documentación SOC 2 de Supabase dice que ese cumplimiento termina en el borde de su producto. Tus tablas, tus claves y tus buckets de Storage quedan al otro lado de esa línea.","Escaneamos 30.998 apps en vivo en agosto de 2026. En 2.096 de las 3.680 que pudimos comprobar, una tabla respondió a un desconocido, sobre una plataforma que funcionaba tal y como se diseñó.","LC8mG4gxzeyoeboXq6ZcAyKdfYvMGVpM-5ERB9dUmQw",[412,419,425,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,521,527,533,539,545,551,557,563,564,570,576,582,588,594,599,605,611,616,621,627,633,638,643,649],{"path":413,"title":414,"description":415,"published":416,"category":417,"image":418,"draft":371},"\u002Fblog\u002Fsupabase-backup-auth-users","Por qué tu dump de Supabase no tiene usuarios dentro","Ejecuta supabase db dump por sí solo y obtienes la forma de tu base de datos y ninguna de sus filas, sin el esquema auth donde viven tus usuarios.","2026-09-23","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":420,"title":421,"description":422,"published":423,"category":367,"image":424,"draft":371},"\u002Fblog\u002Fdomain-and-certificate-expiry","Dominio caducado, web caída: qué pasa a partir de ahora","Tu dominio caducó y tu web está caída. Aquí tienes el reloj que acaba de arrancar, por qué el certificado es el menor problema, y cómo comprobar ambos.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":426,"title":427,"description":428,"published":429,"category":367,"image":430,"draft":371},"\u002Fblog\u002Fis-lovable-safe","¿Es seguro Lovable? Lo que vimos en 18.554 aplicaciones Lovable","¿Es seguro Lovable? Pasamos 18.554 aplicaciones Lovable por nueve comprobaciones. La plataforma fue la más limpia de cinco. Los hallazgos estaban dentro.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":432,"title":433,"description":434,"published":435,"category":367,"image":436,"draft":371},"\u002Fblog\u002Fvibe-coded-app-security-checklist","La lista de seguridad del vibe coding, en nueve comprobaciones","Una lista de seguridad del vibe coding con nueve puntos, cada uno verificable en tu app desde fuera por cualquiera, y cada uno con una prueba de una línea.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":438,"title":439,"description":440,"published":441,"category":367,"image":442,"draft":371},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Una clave secreta de Stripe en tu frontend puede mover dinero","Una clave secreta de Stripe expuesta en tu frontend puede reembolsar, cobrar y leer cada ficha de cliente que tienes. Tu clave pk_live_ sí debe estar ahí.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":444,"title":445,"description":446,"published":447,"category":367,"image":448,"draft":371},"\u002Fblog\u002Fvite-and-next-public-env-vars","Variables de entorno de Vite expuestas: el prefijo dice publica esto","Variables de entorno de Vite expuestas en tu app: hicieron lo que pedía el prefijo. VITE_ y NEXT_PUBLIC_ significan publica esto, y la IA nunca supo el coste.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":450,"title":451,"description":452,"published":453,"category":367,"image":454,"draft":371},"\u002Fblog\u002Fbase44-source-maps","Seguridad en Base44: qué marca un escaneo y qué te toca arreglar a ti","Seguridad en Base44 en 5.438 apps escaneadas: tres hallazgos en casi todas son de la plataforma, el source map es la insignia de Base44 y lo tuyo es poco.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":456,"title":457,"description":458,"published":459,"category":367,"image":460,"draft":371},"\u002Fblog\u002Fis-cursor-ai-safe","¿Es seguro Cursor AI? El editor, el código y la app que publicaste","¿Es seguro Cursor AI? Tres preguntas en una búsqueda: qué guarda Cursor, en qué falla el código que escribe y si la app que publicaste está abierta.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":462,"title":463,"description":464,"published":465,"category":367,"image":466,"draft":371},"\u002Fblog\u002Fis-replit-safe","¿Es seguro Replit? Lo que vimos en 3.042 aplicaciones Replit en vivo","¿Es seguro Replit? Pasamos 3.042 aplicaciones Replit en vivo por nueve comprobaciones externas. Los hallazgos estaban en la aplicación publicada, no en el host.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":468,"title":469,"description":470,"published":471,"category":417,"image":472,"draft":371},"\u002Fblog\u002Fsupabase-storage-backup","Supabase storage backup: tu copia de la base no tiene archivos","Un Supabase storage backup es una tarea aparte. Las copias de la base guardan la lista de tus archivos y ninguno de ellos, así que cada upload queda roto.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":474,"title":475,"description":476,"published":477,"category":417,"image":478,"draft":371},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-time recovery de Supabase: precio y límites","El point-in-time recovery de Supabase rebobina tu base de datos a cualquier segundo de la última semana. Cuesta $100 al mes sobre Pro y solo cubre la base.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":480,"title":481,"description":482,"published":483,"category":417,"image":484,"draft":371},"\u002Fblog\u002Fsupabase-project-paused-recover","¿Proyecto de Supabase pausado? Tus datos siguen ahí","Supabase pausó tu proyecto tras una semana sin actividad. No se ha borrado nada, Restaurar está junto al nombre y tienes un año antes de que eso cambie.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":486,"title":487,"description":488,"published":489,"category":367,"image":490,"draft":371},"\u002Fblog\u002Fsafest-ai-app-builder","¿Qué builder de apps con IA es más seguro? 30.998 apps escaneadas","¿Qué builder de apps con IA es más seguro? Escaneamos 30.998 apps activas de Lovable, Base44, Replit, v0 y Bolt. El builder no es lo que decide tu nota.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":492,"title":493,"description":494,"published":495,"category":367,"image":496,"draft":371},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Activa Row Level Security en cada tabla de Supabase y compruébalo","Activar Row Level Security en Supabase sin política cierra la tabla del todo. Una política sin el interruptor no hace nada. Aquí tienes el SQL y la prueba.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":498,"title":499,"description":500,"published":501,"category":367,"image":502,"draft":371},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": lo que el aviso no ve","Supabase marca \"RLS disabled in public\" como error. No dice nada de la política de lectura que deja tu tabla igual de abierta a cualquiera.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":504,"title":505,"description":506,"published":507,"category":367,"image":508,"draft":371},"\u002Fblog\u002Frotate-supabase-service-role-key","Cómo rotar una clave service_role de Supabase filtrada","Supabase dice que primero cierres la fuga. Otras guías dicen que rotes ya. Cuál es lo correcto depende de dónde se filtró tu clave service_role.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":510,"title":511,"description":512,"published":513,"category":367,"image":514,"draft":371},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Escáneres de seguridad vibe coding comparados, el nuestro incluido","El mejor escáner de seguridad para vibe coding depende de tres preguntas que ninguna lista de funciones responde. Diez herramientas, con precios.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":516,"title":517,"description":518,"published":519,"category":367,"image":520,"draft":371},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker: haz tú mismo las cinco comprobaciones","Un Supabase security checker lee tu app publicada en lugar de la configuración de tu proyecto. Estas son las cinco comprobaciones y cómo hacer cada una.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":522,"title":523,"description":524,"published":525,"category":367,"image":526,"draft":371},"\u002Fblog\u002Fvibe-coding-security-scanner","Escáner de seguridad para vibe coding: qué se le escapa","Un escáner de seguridad para vibe coding lee tu app en vivo desde fuera. Qué cubre eso, las cuatro cosas que no puede ver y cómo leer el resultado.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":528,"title":529,"description":530,"published":531,"category":367,"image":532,"draft":371},"\u002Fblog\u002Fmissing-security-headers","Faltan cabeceras de seguridad: cuándo importa de verdad","Que falten cabeceras de seguridad es el hallazgo que más imprime nuestro escáner. Contra qué protegen y cuándo son la línea menos urgente de tu informe.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":534,"title":535,"description":536,"published":537,"category":367,"image":538,"draft":371},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Tu clave de API de OpenAI está expuesta en tu frontend. Rótala.","Una clave de API de OpenAI expuesta en tu frontend no se puede atar a un dominio. Rótala hoy, mueve la llamada a tu servidor y limita el gasto.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":540,"title":541,"description":542,"published":543,"category":367,"image":544,"draft":371},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","Clave de API expuesta en el frontend: qué llevan 30.998 apps","Una clave de API expuesta en tu frontend suele ser una clave de Google Maps. Escaneamos 30.998 apps vibe-coded y contamos qué secretos se filtran de verdad.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":546,"title":547,"description":548,"published":549,"category":417,"image":550,"draft":371},"\u002Fblog\u002Fsupabase-backup-tools-compared","Herramientas de backup de Supabase comparadas, la nuestra incluida","Cuatro tipos de herramienta de backup de Supabase, qué copia cada una y cuándo una GitHub Action gratuita le gana a pagar a cualquiera, nosotros incluidos.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":552,"title":553,"description":554,"published":555,"category":367,"image":556,"draft":371},"\u002Fblog\u002Freplit-secrets-explained","Cómo usar secrets en Replit, y qué se publica de todos modos","Cómo usar secrets en Replit: añadir uno, leerlo y arreglar las dos causas del undefined. Y las claves que la herramienta Secrets no puede mantener privadas.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":558,"title":559,"description":560,"published":561,"category":417,"image":562,"draft":371},"\u002Fblog\u002Fback-up-supabase-free-tier","Backups del plan gratuito de Supabase: cómo hacer uno sin terminal","No hay backups en el plan gratuito de Supabase: la copia tienes que hacerla tú. Cómo sacarla desde el panel y qué deja fuera la vía CSV.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":402,"title":5,"description":370,"published":403,"category":367,"image":391,"draft":371},{"path":565,"title":566,"description":567,"published":568,"category":367,"image":569,"draft":371},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Dónde están tus claves API de Supabase: anon, service_role y URL","La URL del proyecto, la clave anon y la clave service_role están en una sola página del panel. Aquí tienes dónde está, y cuál de los cuatro va en tu app.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":571,"title":572,"description":573,"published":574,"category":367,"image":575,"draft":371},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","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.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":577,"title":578,"description":579,"published":580,"category":367,"image":581,"draft":371},"\u002Fblog\u002Fcors-wildcard-security-risk","¿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.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":583,"title":584,"description":585,"published":586,"category":417,"image":587,"draft":371},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","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.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":589,"title":590,"description":591,"published":592,"category":417,"image":593,"draft":371},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","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.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":270,"title":595,"description":596,"published":597,"category":367,"image":598,"draft":371},"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.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":600,"title":601,"description":602,"published":603,"category":367,"image":604,"draft":371},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","¿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.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":606,"title":607,"description":608,"published":609,"category":417,"image":610,"draft":371},"\u002Fblog\u002Fai-agent-deleted-my-database","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.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":98,"title":612,"description":613,"published":614,"category":367,"image":615,"draft":371},"¿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í.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":617,"title":618,"description":619,"published":614,"category":367,"image":620,"draft":371},"\u002Fblog\u002Fsource-maps-exposed-in-production","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.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":622,"title":623,"description":624,"published":625,"category":367,"image":626,"draft":371},"\u002Fblog\u002Fsupabase-new-api-keys","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?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":628,"title":629,"description":630,"published":631,"category":417,"image":632,"draft":371},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","¿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.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":259,"title":634,"description":635,"published":636,"category":367,"image":637,"draft":371},"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.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":639,"title":640,"description":641,"published":636,"category":417,"image":642,"draft":371},"\u002Fblog\u002Fversion-history-is-not-a-backup","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.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":644,"title":645,"description":646,"published":647,"category":417,"image":648,"draft":371},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","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.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":282,"title":650,"description":651,"published":647,"category":367,"image":652,"draft":371},"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.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1790150954127]