[{"data":1,"prerenderedAt":817},["ShallowReactive",2],{"blog-es-base44-security-scan":3,"blog-index-es":462},{"id":4,"title":5,"body":6,"category":420,"cover":421,"coverAlt":422,"description":423,"draft":424,"extension":425,"faq":426,"image":442,"keywords":443,"meta":451,"navigation":452,"ogTitle":5,"path":453,"published":454,"seo":455,"stem":456,"tldr":457,"updated":454,"__hash__":461},"blog_es\u002Fblog\u002Fbase44-security-scan.md","Escaneo de seguridad de Base44: lo que solo él ve",{"type":7,"value":8,"toc":408},"minimark",[9,13,21,24,29,32,127,139,161,165,168,171,178,184,193,197,200,226,233,238,241,249,257,261,264,267,272,275,279,282,296,302,313,317,320,329,347,357,374,377,381,401],[10,11,12],"p",{},"Abres el Dashboard de tu app de Base44, haces clic en Security, pulsas Run\nSecurity Scan y unos segundos después vuelve una lista. O no vuelve nada. En\nambos casos tienes un resultado en la mano y te preguntas si esa era toda la\nrevisión.",[10,14,15,16,20],{},"La mayoría de los textos sobre esto lo cuentan al revés. El argumento habitual\ndice que un escaneo lanzado desde dentro de tu proyecto no puede ver lo que ve\ninternet, así que el de fuera es el fiable. En Base44 es justo al contrario en\nla mitad que importa: ",[17,18,19],"strong",{},"el escaneo de seguridad de Base44 es lo único capaz de\ncomprobar si un desconocido puede leer tus datos, y podemos enseñarte que\nnosotros no podemos."," Lo intentamos en 1.466 apps de Base44 y obtuvimos\nrespuesta de dos.",[10,22,23],{},"Así que esto es un reparto del trabajo. Un escaneo trabaja dentro del edificio.\nEl otro se queda en la acera y lee lo que se entrega por delante. Los dos valen\nla pena, y en Base44 el de dentro hace la mitad más pesada.",[25,26,28],"h2",{"id":27},"qué-revisa-el-escaneo-de-seguridad-de-base44","¿Qué revisa el escaneo de seguridad de Base44?",[10,30,31],{},"Siete tipos de problema, leídos desde dentro de tu proyecto. Tu dirección\npublicada no la pide nunca.",[33,34,35,51],"table",{},[36,37,38],"thead",{},[39,40,41,45,48],"tr",{},[42,43,44],"th",{},"Qué revisa",[42,46,47],{},"Qué significa",[42,49,50],{},"Planes",[52,53,54,66,76,86,96,106,117],"tbody",{},[39,55,56,60,63],{},[57,58,59],"td",{},"Data permission issues",[57,61,62],{},"Una tabla de datos sin reglas de acceso, o gente con más acceso del que le corresponde",[57,64,65],{},"Todos",[39,67,68,71,74],{},[57,69,70],{},"Exposed secrets",[57,72,73],{},"Claves de API, contraseñas o tokens dejados en un sitio al que llegan los visitantes de la app",[57,75,65],{},[39,77,78,81,84],{},[57,79,80],{},"Unauthenticated backend functions",[57,82,83],{},"Algo entre bastidores que entrega datos sin comprobar quién pregunta. Titulado \"Anyone can run this function\"",[57,85,65],{},[39,87,88,91,94],{},[57,89,90],{},"Credit protection",[57,92,93],{},"Tus funciones de IA, imagen o correo alcanzables desde fuera de tu app, así que otro gasta tus créditos",[57,95,65],{},[39,97,98,101,104],{},[57,99,100],{},"App dependencies",[57,102,103],{},"Una librería de terceros con un fallo conocido, y la versión a la que conviene pasar",[57,105,65],{},[39,107,108,111,114],{},[57,109,110],{},"Code vulnerabilities",[57,112,113],{},"Patrones en tu propio código: comprobaciones de acceso que faltan, manejo imprudente de lo que alguien escribió",[57,115,116],{},"Desde Builder",[39,118,119,122,125],{},[57,120,121],{},"Security header recommendations",[57,123,124],{},"Dos protecciones del navegador, la incrustación en iframe y las funciones del navegador que no usas",[57,126,65],{},[10,128,129,130,134,135,138],{},"Todo eso se leyó el 10 de octubre de 2026 en la documentación de Base44, en las\npáginas ",[131,132,133],"code",{},"Running a security scan"," y ",[131,136,137],{},"Base44 security: An overview",". Tres cosas\nde ahí conviene conocerlas antes de fiarte del resultado:",[140,141,142,149,155],"ul",{},[143,144,145,148],"li",{},[17,146,147],{},"El escaneo nunca aplica una corrección por su cuenta."," Tú pulsas Fix y\nBase44 escribe el cambio en el chat de IA de tu app con un checkpoint delante,\nde modo que una corrección que rompa algo se puede deshacer desde el chat.",[143,150,151,154],{},[17,152,153],{},"El botón Fix with AI en una función no autenticada rechaza a cualquiera que\nllame sin estar la sesión iniciada."," Base44 dice acto seguido que eso puede\nromper una página pensada para visitantes sin sesión, un webhook o una\nintegración que llame a esa función. Prueba esos caminos después.",[143,156,157,160],{},[17,158,159],{},"Avisa al publicar y no te detiene."," El panel de publicación muestra un\nestado de Security, y Base44 lo describe como un aviso que no te impide\npublicar.",[25,162,164],{"id":163},"lo-que-solo-él-puede-ver","Lo que solo él puede ver",[10,166,167],{},"Si la gente que usa tu app puede llegar a datos que no son suyos. En una app de\nBase44, nada fuera de la plataforma puede comprobarlo.",[10,169,170],{},"En la mayoría de los builders tu app habla con su base de datos directamente\ndesde el navegador de tu visitante. Eso hace que la base tenga una dirección\npública, que tu página lleve esa dirección encima y que cualquiera pueda sacarla\ny empezar a preguntar. Si obtiene respuestas depende de un ajuste tabla por\ntabla que la mayoría de los dueños no ha abierto nunca. Una app de Base44 manda\nsus peticiones a través de Base44, así que no hay ninguna dirección en la calle\nque alguien pueda probar.",[10,172,173,174,177],{},"La medición es lo bastante desigual como para zanjarlo. 1.466 de las 5.442 apps\nde Base44 que calificamos nombran un proyecto de Supabase en algún punto de la\npágina. Nuestra revisión de Row Level Security obtuvo una respuesta utilizable\nde ",[17,175,176],{},"2"," de ellas. En Lovable, donde la base responde directamente a la calle,\nrespondieron 3.553 de 6.535. En Bolt, 35 de 267.",[179,180],"diagram",{"alt":181,"caption":182,"src":183},"Dos carriles. En el de arriba una lupa está dentro de un panel de plataforma sellado, junto a la base de datos, y la alcanza, con una marca de visto. En el de abajo una lupa de fuera alcanza la página de la app, con visto, y una línea discontinua desde esa misma lupa hacia la base se detiene en la pared del panel, bajo un signo de interrogación.","Arriba el escaneo de Base44, trabajando dentro de la plataforma donde viven tus datos. Abajo un escaneo externo, que lee la página que descargan tus visitantes y se detiene en la pared.","\u002Fblog\u002Fbase44-security-scan\u002Fthe-two-halves-1600x680.png",[10,185,186,187,192],{},"Dos apps no son una tasa y no vamos a imprimir ninguna. Lo que el número zanja\nes quién puede mirar: en una app de Base44 las reglas de acceso a tus datos se\nleen desde la página Security de tu propio panel y desde ningún otro sitio.\n",[188,189,191],"a",{"href":190},"\u002Fblog\u002Fis-base44-safe","El recuento completo de cómo puntuaron 5.442 apps de Base44","\ntiene el resto de las cifras.",[25,194,196],{"id":195},"por-qué-tu-app-publicada-puede-seguir-llevando-una-clave","Por qué tu app publicada puede seguir llevando una clave",[10,198,199],{},"Porque el escaneo lee tu proyecto y tus visitantes descargan un archivo. Cuatro\ncosas de la propia documentación de Base44 separan ambas:",[140,201,202,208,214,220],{},[143,203,204,207],{},[17,205,206],{},"La versión publicada puede ser más antigua que la que leyó el escaneo."," El\nhallazgo de credit protection de Base44 tiene un estado para exactamente esto,\ny el aviso dice \"Publish changes before protecting credits\" cuando tu app en\nvivo sigue corriendo una versión anterior.",[143,209,210,213],{},[17,211,212],{},"El estado al publicar es un aviso."," Risks found abre la página Security, y\naun así puedes publicar.",[143,215,216,219],{},[17,217,218],{},"Un hallazgo que ignoras no vuelve."," Los hallazgos ignorados pasan a su\npropia sección al final de la lista y, en palabras de Base44, no reaparecen en\nel siguiente escaneo. Una lista limpia puede significar que alguien descartó\nel hallazgo en junio.",[143,221,222,225],{},[17,223,224],{},"La mitad del código necesita un plan de pago."," Code vulnerability scanning\ncorre desde Builder, igual que la integración opcional con Wiz, que añade\nanálisis estático usando tu propio tenant de Wiz.",[10,227,228,229,232],{},"Desde la acera, esa distancia tiene un tamaño. De las 5.442 apps de Base44 que\ncalificamos, ",[17,230,231],{},"95 servían una clave de API de Google en la página",", 11 tenían\nalgo con forma de contraseña o de token, una una clave restringida de Stripe y\notra una clave secreta de Stripe. La revisión de credenciales respondió en las\n5.442 apps, así que son recuentos y no una muestra.",[179,234],{"alt":235,"caption":236,"src":237},"Carril de arriba: una ventana de editor y al lado un informe con una marca de visto. Carril de abajo: una página de app publicada con una llave ámbar, a la que llegan tres visitantes en el borde derecho. Una línea discontinua une los dos carriles como dos versiones de una misma app.","El escaneo lee la versión que está en tu editor. Tus visitantes descargan la que publicaste, y según el propio hallazgo de créditos de Base44 esa puede ser una anterior.","\u002Fblog\u002Fbase44-security-scan\u002Fthe-publish-gap-1600x600.png",[10,239,240],{},"Esos 95 son una proporción menor que la de los vecinos, y conviene decirlo\nclaro: en el mismo barrido, 727 de 18.563 apps de Lovable y 200 de 3.050 de\nReplit llevaban una clave de API de Google. En esta medición las apps de Base44\nestán más tranquilas que las construidas al lado.",[10,242,243,244,248],{},"Es además el hallazgo de esta lista que más probablemente esté bien. Google\nemite un solo tipo de clave de API y espera verla en el navegador; lo que decide\nsi un desconocido puede hacerte subir una factura con ella es si la restringiste\na tu propio dominio, y esa restricción vive en la consola de Google, no en tu\napp.\n",[188,245,247],{"href":246},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Qué revisar en una clave de Google que has encontrado en tu propia página","\nson los dos ajustes que hay que leer.",[10,250,251,252,256],{},"Si prefieres ver la lista completa de lo que entrega tu app de Base44 publicada,\nnuestro escaneo gratuito lee tu dirección en vivo y cuenta lo que ve desde\nfuera. Tarda unos 20 segundos y no pide cuenta:\n",[188,253,255],{"href":254},"\u002Fsecurity-scanner","escanea tu app gratis",".",[25,258,260],{"id":259},"la-revisión-de-esa-lista-con-la-que-nadie-cuenta","La revisión de esa lista con la que nadie cuenta",[10,262,263],{},"Alguien llamando a las funciones de pago de tu app directamente, sin pasar por\ntu app en ningún momento.",[10,265,266],{},"Base44 lo llama credit protection, y el hallazgo aparece cuando una función tuya\nque usa IA, generación de imágenes o correo es alcanzable desde fuera de tu app.\nSu documentación es clara sobre la consecuencia: quien la encuentre puede\nejecutarla y gastar tus créditos de integración. Está valorada como High, y\nsegún tu app la corrección es un solo botón Fix que restringe esas funciones sin\ntocar tu propio acceso, o un Resolve with AI que mueve las llamadas a tu backend.",[179,268],{"alt":269,"caption":270,"src":271},"Una página de app en el centro con una flecha de visitante que entra en ella. Una segunda flecha desde una figura a la izquierda rodea la página y llega directamente a un destello y a un montón de monedas que hay detrás.","La ruta de abajo es de la que habla credit protection. La función es alcanzable sin abrir tu app, y cada llamada gasta los mismos créditos que las tuyas.","\u002Fblog\u002Fbase44-security-scan\u002Fcredits-from-outside-1600x560.png",[10,273,274],{},"Esto es de lo que un escaneo de dentro hace bien y uno de fuera no tiene forma\nhonesta de probar. Averiguar si alguien puede ejecutar gratis tu función de\ncorreo supondría ejecutarla, así que nuestro escaneo le deja esa a Base44 y\ncuenta lo que puede leer sin gastar nada tuyo.",[25,276,278],{"id":277},"lo-que-no-revisa-ninguno-de-los-dos","Lo que no revisa ninguno de los dos",[10,280,281],{},"Tres cosas, y la última es la única de esta página que no se arregla después.",[10,283,284,287,288,291,292,256],{},[17,285,286],{},"Tu certificado y tu dominio, si la app está en tu propia dirección."," Una app\nde Base44 en una dirección ",[131,289,290],{},"base44.app"," hereda los de Base44. Múdala a un\ndominio que hayas comprado y las fechas de renovación pasan a ser tuyas, que es\n",[188,293,295],{"href":294},"\u002Fblog\u002Fdomain-and-certificate-expiry","la forma más silenciosa en que una app que funciona se apaga",[10,297,298,301],{},[17,299,300],{},"Los archivos de un bucket de Supabase Storage que hayas conectado."," De las\n1.466 apps de Base44 que nombran un proyecto de Supabase, nuestra revisión de\nbuckets pudo responder en 5. La misma pared que tapa la base tapa el bucket, y\nla revisión de accesos de Base44 cubre las tablas que ella gestiona, no un\nbucket de un proyecto que conectaste tú.",[10,303,304,307,308,312],{},[17,305,306],{},"Si existe una copia de tus datos."," Eso no lo revisa ningún escaneo a ningún\nlado de la pared, porque no es una propiedad de tu app. Es una propiedad de lo\nque montaste en otro sitio, y decide si una migración que sale mal o un agente\ncon acceso a la base acaba en una restauración o en un correo a tus usuarios.\n",[188,309,311],{"href":310},"\u002Fblog\u002Fai-agent-deleted-my-database","El día en que un agente de IA borró una base de datos de producción","\nenseña cómo se lee lo segundo.",[25,314,316],{"id":315},"mantener-cubiertas-las-dos-mitades-después-de-publicar","Mantener cubiertas las dos mitades después de publicar",[10,318,319],{},"Vuelve a lanzar los dos después de cualquier cambio. Un resultado de la semana\npasada describe la app de la semana pasada, y en Base44 publicar es un botón,\nasí que una tabla añadida esta mañana o una clave pegada a medianoche está en\nvivo en cuanto lo pulsas.",[10,321,322],{},[17,323,324,328],{},[188,325,327],{"href":326},"\u002Fpricing","Reeve Monitor"," vuelve a pasar las nueve revisiones de fuera por\nti:",[140,330,331,334,337,344],{},[143,332,333],{},"las nueve revisiones cada hora, en hasta tres apps",[143,335,336],{},"si la app responde, cada 60 segundos",[143,338,339,340,343],{},"un mensaje cuando un resultado ",[17,341,342],{},"cambia",", para que un hallazgo nuevo no espere a que mires",[143,345,346],{},"un informe mensual de lo que vio",[10,348,349],{},[17,350,351,352,356],{},"Si tu app de Base44 guarda sus datos en tu propio proyecto de Supabase,\n",[188,353,355],{"href":354},"\u002Fsupabase-backups","Reeve Care"," conserva una copia:",[140,358,359,362,365,368,371],{},[143,360,361],{},"una copia cifrada de tu base de datos de Supabase cada noche, guardada donde tu proyecto no llega",[143,363,364],{},"cada copia verificada antes de contar, contando las filas de cada tabla",[143,366,367],{},"una restauración en un clic cuando la necesites",[143,369,370],{},"también tus archivos subidos, en cuanto conectes una credencial de Storage",[143,372,373],{},"todo lo que hace Monitor",[10,375,376],{},"Los dos están en la página de precios, que a veces está por debajo de la cifra\nde lista de aquí y nunca por encima.",[25,378,380],{"id":379},"qué-hacer-hoy","Qué hacer hoy",[382,383,384],"key-takeaways",{},[140,385,386,389,392,395,398],{},[143,387,388],{},"Lanza el escaneo desde Dashboard → Security antes de tu próxima publicación y lee los hallazgos antes de pulsar Fix all issues. La corrección de una función no autenticada puede dejar fuera una página que querías abierta.",[143,390,391],{},"Mira la sección Ignored al final de la lista. Un hallazgo que alguien ignoró hace meses sigue ignorado hoy.",[143,393,394],{},"Si tu app gasta créditos de integración en IA, imágenes o correo, lee primero el hallazgo de credit protection. Es el de la lista que cuesta dinero por sí solo.",[143,396,397],{},"Escanea después la dirección publicada desde fuera, porque la app en vivo puede ser una versión anterior a la que leyó el escaneo.",[143,399,400],{},"Guarda una copia de tus datos donde tu app no llegue, si conectaste tu propio proyecto de Supabase. Ninguno de los dos escaneos puede decirte si existe.",[10,402,403,404,256],{},"Empieza por la sección Ignored, se hace en segundos y es el único sitio donde un\ninforme limpio puede estar escondiendo un hallazgo de verdad. Si quieres la\nversión en lenguaje llano de todo lo que se puede revisar desde fuera en una app\nde Base44, tenemos ",[188,405,407],{"href":406},"\u002Fis-your-base44-app-safe","una guía para apps de Base44",{"title":409,"searchDepth":410,"depth":410,"links":411},"",3,[412,414,415,416,417,418,419],{"id":27,"depth":413,"text":28},2,{"id":163,"depth":413,"text":164},{"id":195,"depth":413,"text":196},{"id":259,"depth":413,"text":260},{"id":277,"depth":413,"text":278},{"id":315,"depth":413,"text":316},{"id":379,"depth":413,"text":380},"Fundamentos de seguridad","\u002Fblog\u002Fbase44-security-scan\u002Fcover-1200x630.png","Un panel de plataforma sellado con una base de datos y una lupa dentro, y delante una página de app que entrega una copia a los visitantes en el borde del marco.","El escaneo de seguridad de Base44 revisa siete tipos de problema desde dentro. Esta es la mitad que lee y nadie más puede leer, y la mitad que nunca mira.",false,"md",[427,430,433,436,439],{"q":428,"a":429},"¿Base44 revisa mi app en busca de problemas de seguridad?","Sí. Abre el editor de tu app, haz clic en Dashboard, luego en Security y luego en Run Security Scan. Revisa siete tipos de problema: las reglas de acceso a tus datos, credenciales expuestas, funciones de backend que responden sin comprobar quién pregunta, funciones que gastan tus créditos de integración, librerías de terceros con fallos conocidos, patrones en tu propio código y dos cabeceras de seguridad del navegador. Cada hallazgo llega con una corrección sugerida que puedes aplicar, y el escaneo no aplica ninguna por su cuenta. Está incluido en todos los planes, también en el gratuito, aunque la mitad que lee el código solo corre desde Builder. Leído el 10 de octubre de 2026.",{"q":431,"a":432},"¿Es suficiente el escaneo de seguridad de Base44?","Es el único escaneo capaz de revisar la parte más importante de una app de Base44, porque tus datos están detrás de Base44 y no en una dirección pública. Lo que no tiene motivo para hacer es traerse tu página publicada y leer lo que salió en ella. Calificamos 5.442 apps de Base44 en vivo: la pregunta sobre la base de datos tuvo respuesta en 2 de ellas, y 95 servían una clave de API de Google en la página. Ejecuta el escaneo de dentro antes de publicar y uno de fuera después.",{"q":434,"a":435},"¿Por qué un escáner externo no puede revisar mi base de datos de Base44?","Porque no hay nada en la calle a lo que llamar. En la mayoría de los builders tu app habla con su base de datos directamente desde el navegador del visitante, así que la base tiene una dirección pública, tu página la lleva encima y cualquiera puede sacarla y hacer preguntas. Una app de Base44 manda sus peticiones a través de Base44. De las 1.466 apps de Base44 que calificamos y que nombran un proyecto de Supabase en algún punto de la página, nuestra revisión de Row Level Security obtuvo una respuesta utilizable de 2. En Lovable, donde la base responde directamente a la calle, respondieron 3.553 de 6.535.",{"q":437,"a":438},"¿Qué encuentra un escaneo externo que Base44 no encuentra?","Lo que tus visitantes reciben ahora mismo. Base44 lee el proyecto que está en tu editor, y cuatro cosas de su propia documentación separan eso de la app en vivo: la versión publicada puede ser más antigua que la que leyó el escaneo, el escaneo avisa al publicar sin bloquearlo, un hallazgo que ignoras una vez no vuelve, y el análisis del código necesita el plan Builder. En las 5.442 apps de Base44 que calificamos, 95 tenían una clave de API de Google en la página, 11 algo con forma de contraseña o de token, una una clave restringida de Stripe y otra una clave secreta de Stripe.",{"q":440,"a":441},"¿Debería ejecutar los dos?","Responden a mitades distintas, así que uno no sustituye al otro. Ejecuta el escaneo de Base44 desde la página Security antes de publicar, lee los hallazgos antes de pulsar Fix all issues y después revisa la dirección publicada desde fuera. Un escaneo externo tarda unos 20 segundos y no pide cuenta.","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",[444,445,446,447,448,449,450],"escaneo de seguridad base44","base44 security scan","base44 revisa la seguridad","revisar la seguridad de una app base44","panel de seguridad base44","base44 revision rls","auditoria de seguridad base44",{},true,"\u002Fblog\u002Fbase44-security-scan","2026-10-10",{"title":5,"description":423},"blog\u002Fbase44-security-scan",[458,459,460],"El escaneo de seguridad de Base44 se ejecuta desde dentro de tu proyecto y revisa siete tipos de problema, desde las reglas de acceso a tus datos hasta las librerías de las que depende tu app. Está incluido en todos los planes, y una de las siete revisiones solo corre desde Builder en adelante.","En una app de Base44 es el único escaneo capaz de responder a lo que la gente quiere decir con \"¿es segura mi app?\": si un desconocido puede leer tus datos. Calificamos 5.442 apps de Base44 en vivo y pudimos preguntarle a 2.","Lo que no tiene motivo para leer es la página que descargan tus visitantes. En 95 de esas 5.442 apps había ahí una clave de API de Google.","rGdU0gBwWMRlDVQOvTS0qUWwz2oB2X2IXWI-_U1VORA",[463,469,470,476,482,488,493,499,505,511,517,523,529,535,542,548,554,559,565,571,577,582,588,594,600,606,612,618,624,630,636,642,648,654,660,666,672,678,684,690,696,702,708,714,720,726,732,738,744,750,756,762,767,772,778,783,789,795,801,806,812],{"path":464,"title":465,"description":466,"published":467,"category":420,"image":468,"draft":424},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" al subir","\"New row violates row-level security policy for table objects\" significa que tu subida no tiene regla insert. Hacer público el bucket no añade ninguna.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":453,"title":5,"description":423,"published":454,"category":420,"image":442,"draft":424},{"path":471,"title":472,"description":473,"published":474,"category":420,"image":475,"draft":424},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Tu clave API se filtró. El orden en el que hay que actuar","Una clave API se filtró y no sabes por dónde empezar. No todas las claves de tu frontend lo son, y el orden importa más que la velocidad.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":477,"title":478,"description":479,"published":480,"category":420,"image":481,"draft":424},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" sin desactivar RLS","\"Infinite recursion detected in policy for relation\" significa que tu policy preguntó a la tabla que protege. Así se rompe el círculo.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":483,"title":484,"description":485,"published":486,"category":420,"image":487,"draft":424},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" en Supabase, y el arreglo equivocado","\"No API key found in request\" significa que tu petición llegó a Supabase sin clave. Casi todas las respuestas apuntan a las reglas de tu base de datos.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":190,"title":489,"description":490,"published":491,"category":420,"image":492,"draft":424},"¿Es seguro Base44? Lo que vimos en 5.442 apps Base44","¿Es seguro Base44? Pasamos nueve comprobaciones a 5.442 apps Base44 en producción. Casi todas sacaron B por motivos que su dueño nunca eligió.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":494,"title":495,"description":496,"published":497,"category":420,"image":498,"draft":424},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Ocultar una clave API: muévela a una Edge Function de Supabase","Ocultar una clave API significa sacarla del navegador, y una Edge Function de Supabase es el sitio más pequeño donde ponerla. Dos pasos importan más.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":500,"title":501,"description":502,"published":503,"category":420,"image":504,"draft":424},"\u002Fblog\u002Fenv-file-exposed-on-your-server","¿Tu archivo .env está expuesto? Las doce rutas a revisar","¿Tu archivo .env está expuesto en tu propio servidor web? Doce direcciones te lo dicen, y un acierto significa que todo lo que contiene ya es público.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":506,"title":507,"description":508,"published":509,"category":420,"image":510,"draft":424},"\u002Fblog\u002Fis-v0-safe","Seguridad de v0: las 1.790 aplicaciones escaneadas sacaron una A","Seguridad de v0, medida en 1.790 aplicaciones v0 en vivo: todas sacaron A. Solo 17 nombraban una base de datos, y eso es casi todo lo que mide la A.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":512,"title":513,"description":514,"published":515,"category":420,"image":516,"draft":424},"\u002Fblog\u002Fis-bolt-safe","¿Es seguro Bolt? Lo que vimos en 1.123 aplicaciones Bolt","¿Es seguro Bolt? Pasamos 1.123 aplicaciones Bolt en vivo por nueve comprobaciones. El hosting salió limpio. Los hallazgos eran claves y tablas abiertas dentro.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":518,"title":519,"description":520,"published":521,"category":420,"image":522,"draft":424},"\u002Fblog\u002Fis-supabase-down-or-your-app","¿Supabase está caído o es tu app? Cómo distinguirlo","¿Supabase está caído o es tu app? Un proyecto pausado, una base de datos llena y un fallo tuyo parecen lo mismo. Cuatro comprobaciones los separan.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":524,"title":525,"description":526,"published":527,"category":420,"image":528,"draft":424},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","¿Supabase cifra mis datos? Sí. Esto es lo que detiene","¿Supabase cifra los datos? Sí: AES-256 en reposo, TLS en tránsito, SOC 2 e ISO 27001. Qué cubre cada uno, y la fuga que ninguno de ellos detiene.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":530,"title":531,"description":532,"published":533,"category":420,"image":534,"draft":424},"\u002Fblog\u002Fsupabase-free-plan-limits","¿Cuánto cuesta Supabase? Los límites del plan gratuito","Los límites del plan gratuito de Supabase: 500 MB de base de datos, 5 GB de egress y ningún backup. Qué pasa en cada uno y qué cambia Pro por $25.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":536,"title":537,"description":538,"published":539,"category":540,"image":541,"draft":424},"\u002Fblog\u002Ftest-your-supabase-backup","Prueba tu backup de Supabase antes del día que lo necesites","Cómo probar tu backup de Supabase: restaurarlo en un proyecto de prueba, contar filas, iniciar sesión y buscar la línea que le falta a un archivo cortado.","2026-09-28","Backups","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":543,"title":544,"description":545,"published":546,"category":540,"image":547,"draft":424},"\u002Fblog\u002Fsupabase-backup-github-action","Backup gratis de Supabase con una GitHub Action, y la trampa","Un backup de Supabase con GitHub Action es gratis y sirve a muchas apps. El workflow, el connection string correcto y el egress de cada ejecución.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":549,"title":550,"description":551,"published":552,"category":540,"image":553,"draft":424},"\u002Fblog\u002Fdownload-your-supabase-backup","Por qué no puedes descargar tu backup de Supabase","No puedes descargar tu backup de Supabase en un proyecto actual: la copia diaria es una instantánea física. Cómo comprobarlo y tener tu propia copia.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":555,"title":556,"description":557,"published":552,"category":420,"image":558,"draft":424},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": el grant que falta","Desde el 30 de octubre, una tabla nueva de Supabase responde \"permission denied for table\" hasta que le das acceso. El grant del email es la mitad del arreglo.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":560,"title":561,"description":562,"published":563,"category":420,"image":564,"draft":424},"\u002Fblog\u002Fopen-api-endpoint-exposed","¿Un endpoint de API abierto es un problema? Mira el JSON","Tu escaneo señaló un endpoint de API abierto. Que importe depende de lo que devolvió, y la mayoría de los que encontramos eran de la plataforma.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":566,"title":567,"description":568,"published":569,"category":420,"image":570,"draft":424},"\u002Fblog\u002Flovable-security-scan","Escaneo de seguridad de Lovable: lo que no puede probar","Escaneo de seguridad de Lovable: qué revisan el Quick scan y el Deep scan, cuándo corre cada uno, y lo único que ningún escaneo desde dentro puede probar.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":572,"title":573,"description":574,"published":575,"category":540,"image":576,"draft":424},"\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","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":294,"title":578,"description":579,"published":580,"category":420,"image":581,"draft":424},"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":583,"title":584,"description":585,"published":586,"category":420,"image":587,"draft":424},"\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":589,"title":590,"description":591,"published":592,"category":420,"image":593,"draft":424},"\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":595,"title":596,"description":597,"published":598,"category":420,"image":599,"draft":424},"\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":601,"title":602,"description":603,"published":604,"category":420,"image":605,"draft":424},"\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":607,"title":608,"description":609,"published":610,"category":420,"image":611,"draft":424},"\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":613,"title":614,"description":615,"published":616,"category":420,"image":617,"draft":424},"\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":619,"title":620,"description":621,"published":622,"category":420,"image":623,"draft":424},"\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":625,"title":626,"description":627,"published":628,"category":540,"image":629,"draft":424},"\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":631,"title":632,"description":633,"published":634,"category":540,"image":635,"draft":424},"\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":637,"title":638,"description":639,"published":640,"category":540,"image":641,"draft":424},"\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":643,"title":644,"description":645,"published":646,"category":420,"image":647,"draft":424},"\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":649,"title":650,"description":651,"published":652,"category":420,"image":653,"draft":424},"\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":655,"title":656,"description":657,"published":658,"category":420,"image":659,"draft":424},"\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":661,"title":662,"description":663,"published":664,"category":420,"image":665,"draft":424},"\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":667,"title":668,"description":669,"published":670,"category":420,"image":671,"draft":424},"\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":673,"title":674,"description":675,"published":676,"category":420,"image":677,"draft":424},"\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":679,"title":680,"description":681,"published":682,"category":420,"image":683,"draft":424},"\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":685,"title":686,"description":687,"published":688,"category":420,"image":689,"draft":424},"\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":691,"title":692,"description":693,"published":694,"category":420,"image":695,"draft":424},"\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":697,"title":698,"description":699,"published":700,"category":420,"image":701,"draft":424},"\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":703,"title":704,"description":705,"published":706,"category":540,"image":707,"draft":424},"\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":709,"title":710,"description":711,"published":712,"category":420,"image":713,"draft":424},"\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":715,"title":716,"description":717,"published":718,"category":540,"image":719,"draft":424},"\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":721,"title":722,"description":723,"published":724,"category":420,"image":725,"draft":424},"\u002Fblog\u002Fis-supabase-secure","¿Supabase es seguro? Sí. Tu proyecto es otra pregunta","¿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.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":727,"title":728,"description":729,"published":730,"category":420,"image":731,"draft":424},"\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":733,"title":734,"description":735,"published":736,"category":420,"image":737,"draft":424},"\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":739,"title":740,"description":741,"published":742,"category":420,"image":743,"draft":424},"\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":745,"title":746,"description":747,"published":748,"category":540,"image":749,"draft":424},"\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":751,"title":752,"description":753,"published":754,"category":540,"image":755,"draft":424},"\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":757,"title":758,"description":759,"published":760,"category":420,"image":761,"draft":424},"\u002Fblog\u002Fsupabase-storage-bucket-public","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":246,"title":763,"description":764,"published":765,"category":420,"image":766,"draft":424},"¿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":310,"title":768,"description":769,"published":770,"category":540,"image":771,"draft":424},"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":773,"title":774,"description":775,"published":776,"category":420,"image":777,"draft":424},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","¿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":779,"title":780,"description":781,"published":776,"category":420,"image":782,"draft":424},"\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":784,"title":785,"description":786,"published":787,"category":420,"image":788,"draft":424},"\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":790,"title":791,"description":792,"published":793,"category":540,"image":794,"draft":424},"\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":796,"title":797,"description":798,"published":799,"category":420,"image":800,"draft":424},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","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":802,"title":803,"description":804,"published":799,"category":540,"image":805,"draft":424},"\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":807,"title":808,"description":809,"published":810,"category":540,"image":811,"draft":424},"\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":813,"title":814,"description":815,"published":810,"category":420,"image":816,"draft":424},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","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",1791705962941]