[{"data":1,"prerenderedAt":865},["ShallowReactive",2],{"blog-es-lovable-security-scan":3,"blog-index-es":518},{"id":4,"title":5,"body":6,"category":474,"cover":475,"coverAlt":476,"description":477,"draft":478,"extension":479,"faq":480,"image":495,"keywords":496,"meta":506,"navigation":507,"ogTitle":508,"path":509,"published":510,"seo":511,"stem":512,"tldr":513,"updated":510,"__hash__":517},"blog_es\u002Fblog\u002Flovable-security-scan.md","Escaneo de seguridad de Lovable: lo que no puede probar",{"type":7,"value":8,"toc":460},"minimark",[9,13,21,26,29,40,55,61,65,68,71,86,89,93,96,99,102,114,118,121,124,130,137,141,144,147,165,172,177,188,191,199,203,206,225,228,330,337,341,344,372,375,380,391,395,398,401,408,420,424,452],[10,11,12],"p",{},"Le das a Publish en tu aplicación Lovable y, antes de que salga, corre un\nescaneo. Unos segundos después vuelve limpio, o vuelve con una lista, y en\ncualquiera de los dos casos tienes en la mano un resultado que no sabes juzgar.\n¿Eso es todo? ¿Basta para poner gente real encima?",[10,14,15,16,20],{},"Y esta es la parte que conviene saber antes de decidir: ",[17,18,19],"strong",{},"el escaneo de\nseguridad de Lovable y un escaneo de tu aplicación publicada leen dos objetos\ndistintos."," Uno lee las cerraduras y el cableado. El otro se acerca y baja el\npicaporte. Los dos merecen la pena, y solo el segundo hace lo que hace cada\nvisitante de tu aplicación todo el día.",[22,23,25],"h2",{"id":24},"lovable-revisa-mi-aplicación-en-busca-de-problemas-de-seguridad","¿Lovable revisa mi aplicación en busca de problemas de seguridad?",[10,27,28],{},"Sí, y son dos. Los dos son gratis.",[10,30,31,32,35,36,39],{},"El ",[17,33,34],{},"Quick scan"," corre solo cada vez que publicas y termina en segundos. El\n",[17,37,38],{},"Deep scan"," lee todo el código de tu aplicación y lo lanzas tú. Los dos leen\ntu proyecto desde dentro: la configuración de tu base de datos, las reglas de\nacceso de tus tablas, tu árbol de dependencias, tu código.",[10,41,42,43,50,51,54],{},"Todo lo que viene está leído de\n",[44,45,49],"a",{"href":46,"rel":47},"https:\u002F\u002Fdocs.lovable.dev\u002Ffeatures\u002Fsecurity",[48],"nofollow","la propia documentación de seguridad de Lovable","\nel ",[17,52,53],{},"24 de septiembre de 2026",". Esta función ha cambiado más de una vez en un\naño, así que mira la fecha de cualquier artículo que la describa, este\nincluido.",[56,57],"diagram",{"alt":58,"caption":59,"src":60},"Dos paneles. En el izquierdo, una caja contiene en fila una base de datos, un documento, un signo de código y una pila de líneas, y debajo hay una lupa grande dentro de la caja. En el derecho, una página publicada manda una flecha a una base de datos que queda fuera de ella, tres visitantes esperan al otro lado, y una lupa del mismo tamaño está al aire libre entre ellos.","Dos escaneos, dos sitios donde ponerse. El de dentro de la caja puede abrir cualquier cosa del proyecto. El de la calle solo puede preguntarle a la aplicación qué entrega, que es justo lo que hacen las tres personas que tiene al lado.","\u002Fblog\u002Flovable-security-scan\u002Ftwo-vantage-points-1600x700.png",[22,62,64],{"id":63},"qué-revisa-el-escaneo-de-seguridad-de-lovable","Qué revisa el escaneo de seguridad de Lovable",[10,66,67],{},"Tres áreas, como un conjunto fijo de comprobaciones, en segundos, en cada\npublicación.",[10,69,70],{},"La documentación de Lovable las llama revisión de la base de datos, auditoría de\ndependencias y comprobación de servidor MCP. La revisión de la base de datos es\nla que importa en este artículo, y su descripción merece leerse despacio: cubre\ntablas sin control de acceso por registro, es decir sin Row Level Security,\nademás de reglas de acceso que dejan pasar a todo el mundo y la protección\ncontra contraseñas filtradas apagada. La auditoría de dependencias busca\nvulnerabilidades conocidas en tus paquetes de npm. La comprobación de MCP busca\nun servidor MCP que tu aplicación exponga sin autenticación.",[10,72,73,74,77,78,81,82,85],{},"Los hallazgos vuelven agrupados por área y etiquetados ",[17,75,76],{},"Critical",", ",[17,79,80],{},"Warning","\no ",[17,83,84],{},"Info",". El escaneo salta automáticamente desde el diálogo de publicación, y\nademás puedes lanzarlo desde la vista Security del proyecto.",[10,87,88],{},"Algunos artículos lo llaman Basic scan. El control de la vista Security hoy pone\nRun quick scan, así que si un artículo y tu pantalla no se ponen de acuerdo en\nel nombre, tu pantalla es la actual.",[22,90,92],{"id":91},"qué-añade-el-deep-scan","Qué añade el Deep scan",[10,94,95],{},"Lee todo el código de tu aplicación, y no se lanza solo.",[10,97,98],{},"El Deep scan incluye todo lo del Quick scan y después mira tu propia lógica, tus\npermisos y tus datos. Lovable enumera siete áreas: control de acceso y\nautorización, endpoints sin autenticar y abusables, entrada insegura e\ninyección, secretos y credenciales filtrados, pagos y facturación, autenticación\ny seguridad de cuentas, y datos personales y sensibles expuestos. También es\ngratis.",[10,100,101],{},"La frase de la documentación por la que hay que actuar de verdad es esta: el\nDeep scan no corre automáticamente mientras trabajas. Corre cuando tú lo corres.\nA un proyecto donde nunca se ha lanzado uno nunca le han leído el código, por\nmuchas veces que se haya publicado, y el diálogo de publicación no te lo dice.\nLos espacios de trabajo Enterprise pueden programar Deep scans sobre proyectos\nseleccionados desde el Workspace Security center, y esa es la única\nconfiguración en la que ocurre sin que nadie se acuerde.",[10,103,104,105,108,109,113],{},"Lovable también puede intentar arreglos, mientras construyes o con ",[17,106,107],{},"Try to fix\nall"," en la vista Security. Lee qué ha cambiado un arreglo antes de aceptarlo.\nLa reparación que hace desaparecer un error de row level security es muy a\nmenudo una política que deja pasar a todo el mundo, y esa política\n",[44,110,112],{"href":111},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","cumple la comprobación y deja la tabla abierta",".",[22,115,117],{"id":116},"la-crítica-de-2025-y-qué-cambió","La crítica de 2025, y qué cambió",[10,119,120],{},"La primera versión de esta comprobación te decía que existía una política. No te\ndecía si la política funcionaba, y el investigador que encontró el problema\noriginal lo escribió así en su momento.",[10,122,123],{},"En mayo de 2025 Matt Palmer publicó CVE-2025-48757, sobre aplicaciones Lovable\ncuyas tablas de Supabase tenían el row level security ausente o escrito con\ndemasiada manga ancha. La respuesta de Lovable fue la comprobación previa a\npublicar. El propio texto de Palmer describía su límite en un paréntesis:",[125,126,127],"blockquote",{},[10,128,129],{},"La función Publish de Lovable ayuda a asegurar que las políticas RLS están\nactivadas en todas las tablas y avisa cuando no lo están (pero no indica\nnecesariamente si son suficientes).",[10,131,132,133,113],{},"Ese hueco tiene respuesta en la documentación actual, que nombra las reglas de\nacceso que dejan pasar a todo el mundo como algo que la revisión de la base de\ndatos señala. Nada en este artículo comprueba esa afirmación. Si la quieres\ncomprobar, crea una tabla de usar y tirar con una política que deje pasar a todo\nel mundo y mira si el escaneo la nombra. La versión larga del CVE está en\n",[44,134,136],{"href":135},"\u002Fblog\u002Fis-lovable-safe","¿es seguro Lovable?",[22,138,140],{"id":139},"lo-que-un-escaneo-desde-dentro-no-puede-probar","Lo que un escaneo desde dentro no puede probar",[10,142,143],{},"Si tu aplicación en vivo entrega filas a alguien que no ha iniciado sesión.",[10,145,146],{},"Una cerradura puede estar puesta, inventariada y correcta en el plano, y la\npuerta abrirse igual. Una política es una declaración de lo que debería pasar;\nlo que decide lo que pasa es una petición. Tres maneras de que una regla figure\ncomo presente y la tabla responda igual:",[148,149,150,159,162],"ul",{},[151,152,153,154,158],"li",{},"La política deja pasar a todo el mundo. Escrita como ",[155,156,157],"code",{},"using (true)",", es una\npolítica válida, cumple el requisito de que exista una, y devuelve todas las\nfilas a cualquiera que llame.",[151,160,161],{},"La política cubre la lectura y nada más. El select se comprueba, el insert, el\nupdate y el delete nunca se escribieron, así que cualquiera puede escribir en\nuna tabla que nadie puede leer entera.",[151,163,164],{},"La condición encaja con más gente de la prevista. Tenía que nombrar a un\ncliente y nombra a cada visitante con sesión, o a cada visitante.",[10,166,167,168,171],{},"Ahora la parte que decide cómo deberías leer un resultado verde. ",[17,169,170],{},"Desde fuera,\nesas tres y una tabla sin ninguna protección dan la misma respuesta",", que son\nfilas. Tus usuarios no las distinguen. Nadie más que abra tu aplicación tampoco.",[56,173],{"alt":174,"caption":175,"src":176},"Una cadena de izquierda a derecha: una persona, una flecha a una página publicada, una flecha a una base de datos y una flecha roja a un panel con tres filas de datos. En toda la línea no aparece ninguna llave ni ningún candado. Debajo de la página, dibujada tenue y sin unirse a nada, hay una caja de proyecto con una base de datos, un documento, un signo de código y una pila de líneas.","La petición que lo resuelve, y las filas con las que volvió. El proyecto está debajo de la página y no toca la línea en ningún punto, y por eso nada de lo que hay dentro puede responder por lo que pasó aquí.","\u002Fblog\u002Flovable-security-scan\u002Fthe-request-that-decides-1600x560.png",[10,178,179,180,183,184,113],{},"Entre el 12 y el 14 de agosto de 2026 pasamos las mismas nueve comprobaciones\nexternas por 30.998 aplicaciones en vivo, y 18.554 de ellas estaban publicadas\nen Lovable. De las aplicaciones Lovable que nombraban un proyecto de Supabase,\n3.553 nos respondieron con claridad suficiente para juzgarlas, y ",[17,181,182],{},"2.017 de esas\ndevolvieron filas a una petición que no llevaba ninguna sesión iniciada",". El\nmétodo y todos los denominadores están\n",[44,185,187],{"href":186},"\u002Fresearch\u002Fvibe-coded-app-security-2026","en el informe",[10,189,190],{},"Un apunte honesto sobre ese número. Nosotros estábamos en la acera, y no vemos\nel interior de ninguno de esos proyectos. Podemos contar qué respondieron 2.017\naplicaciones publicadas. No podemos contar cuántas de ellas habían lanzado un\nescaneo, ni qué les dijo.",[10,192,193,194,198],{},"Tu propia aplicación responde a la misma pregunta en unos 20 segundos, y no\ntienes que creernos sobre en qué lado de las 2.017 cae:\n",[44,195,197],{"href":196},"\u002Fsecurity-scanner","escanear tu aplicación",". El escaneo le pide a cada tabla el\nnúmero de filas que recibiría alguien sin sesión iniciada, lee el número y se\npara ahí, sin traerse una sola fila.",[22,200,202],{"id":201},"lo-que-un-escaneo-desde-fuera-no-puede-ver","Lo que un escaneo desde fuera no puede ver",[10,204,205],{},"Bajar el picaporte no te dice nada de una habitación sin puerta a la calle, y\nhay cuatro de esas.",[10,207,208,209,212,213,216,217,220,221,224],{},"Tu ",[17,210,211],{},"árbol de dependencias de npm"," no está en la página que descarga un\nnavegador. Tu ",[17,214,215],{},"código de servidor",", incluidas las edge functions y si una ruta\ncomprueba quién llama, corre en un sitio al que nunca llegamos. Una ",[17,218,219],{},"tabla que\ntu frontend nunca nombra"," nos resulta invisible, porque encontramos nombres de\ntablas en el código que envía tu aplicación más una lista corta de nombres\nhabituales, así que a una tabla que no aparece en el navegador y que nadie\nadivinaría no se le pregunta. Y un ",[17,222,223],{},"servidor MCP"," no es algo que encuentre una\npetición de página.",[10,226,227],{},"Los dos escaneos de Lovable leen entre ambos los cuatro. El nuestro escribe \"No\nse pudo comprobar\" cuando no pudo responder a una pregunta, en lugar de una\nmarca de visto.",[229,230,231,247],"table",{},[232,233,234],"thead",{},[235,236,237,241,244],"tr",{},[238,239,240],"th",{},"De qué se trata",[238,242,243],{},"Escaneo de Lovable, dentro",[238,245,246],{},"Un escaneo desde fuera",[248,249,250,262,273,284,293,302,311,320],"tbody",{},[235,251,252,256,259],{},[253,254,255],"td",{},"Row level security apagado en una tabla",[253,257,258],{},"Sí",[253,260,261],{},"Solo por su efecto",[235,263,264,267,270],{},[253,265,266],{},"Una política que deja pasar a todo el mundo",[253,268,269],{},"Sí, según su documentación",[253,271,272],{},"Sí, por las filas",[235,274,275,278,281],{},[253,276,277],{},"Qué entrega tu aplicación publicada a un desconocido",[253,279,280],{},"No",[253,282,283],{},"Sí, es todo su trabajo",[235,285,286,289,291],{},[253,287,288],{},"Tus dependencias de npm",[253,290,258],{},[253,292,280],{},[235,294,295,298,300],{},[253,296,297],{},"Código de servidor y autenticación de edge functions",[253,299,258],{},[253,301,280],{},[235,303,304,307,309],{},[253,305,306],{},"Una tabla que tu frontend nunca nombra",[253,308,258],{},[253,310,280],{},[235,312,313,316,318],{},[253,314,315],{},"Qué clave acabó en el código que descargan los visitantes",[253,317,258],{},[253,319,258],{},[235,321,322,325,328],{},[253,323,324],{},"Fecha del certificado, del dominio y cabeceras de página",[253,326,327],{},"No está en su lista",[253,329,258],{},[10,331,332,333,113],{},"La fila sobre qué entrega tu aplicación publicada a un desconocido es la razón\npara correr los dos, y nuestro escaneo está construido alrededor de ella. La\nversión general de dónde se acaba la vista desde fuera está en\n",[44,334,336],{"href":335},"\u002Fblog\u002Fvibe-coding-security-scanner","qué se le escapa a un escaneo por URL",[22,338,340],{"id":339},"los-dos-y-en-este-orden","Los dos, y en este orden",[10,342,343],{},"El escaneo de dentro antes de publicar, el de fuera después, porque ese es el\norden en que pasan las dos cosas.",[345,346,347,353,359,364],"ol",{},[151,348,349,352],{},[17,350,351],{},"Deja que el Quick scan corra al publicar y luego léelo."," Son unos\nsegundos, y va a pasar de todas formas. Pasar el diálogo de largo es la\nmanera más común de que un hallazgo Critical llegue a producción.",[151,354,355,358],{},[17,356,357],{},"Lanza un Deep scan antes de que algo real salga en vivo",", y otra vez\ndespués de añadir inicio de sesión, pagos o cualquier tabla con personas\ndentro. Solo no va a correr.",[151,360,361],{},[17,362,363],{},"Publica.",[151,365,366,369,370,113],{},[17,367,368],{},"Escanea la dirección publicada desde fuera."," El nuestro lee tu aplicación\nen vivo como lo haría un visitante, tarda unos 20 segundos, no necesita\ncuenta y nombra las comprobaciones que no pudo terminar:\n",[44,371,197],{"href":196},[10,373,374],{},"En esa secuencia hay un hueco, y es con el que merece la pena contar. El Quick\nscan corre cuando publicas. La mayoría de lo que abre una tabla no pasa por\npublicar: cambias un ajuste en el panel de Supabase, aceptas a medianoche una\npolítica que te ha escrito un asistente en una ventana de chat, creas una tabla\nesta mañana y la pantalla que la lee sale el jueves. Nada de eso es una\npublicación, así que nada de eso lanza un escaneo, y el Deep scan no iba a\ncorrer solo de todos modos.",[56,376],{"alt":377,"caption":378,"src":379},"Una línea de tiempo horizontal con tres puntos turquesa, cada uno unido hacia arriba a una lupa dentro de un círculo. Entre el segundo y el tercero hay un punto ámbar unido hacia abajo a un interruptor de ajustes, y desde ahí la línea se vuelve ámbar hasta el final, pasando por debajo de la tercera lupa.","Cada publicación lanza un escaneo. Un ajuste cambiado en el panel de Supabase no es una publicación, y el ámbar sigue más allá de la siguiente, porque ese escaneo lee el proyecto y no la tabla.","\u002Fblog\u002Flovable-security-scan\u002Fwhen-each-one-runs-1600x600.png",[10,381,382,386,387,390],{},[44,383,385],{"href":384},"\u002Fpricing","Reeve Monitor"," se encarga de la mitad de fuera los días que no te\nacuerdas. Pasa las nueve comprobaciones cada hora en hasta tres aplicaciones,\nvigila si tu aplicación responde siquiera, te avisa cuando un resultado\n",[17,388,389],{},"cambia"," en lugar de esperar a que vayas a mirar, y manda un informe a final\nde mes.",[22,392,394],{"id":393},"leer-un-resultado-verde","Leer un resultado verde",[10,396,397],{},"Un resultado limpio significa que todas las preguntas que ese escaneo podía\nhacer volvieron limpias el día que lo lanzaste. Eso vale algo, y no es un\nveredicto sobre tu aplicación.",[10,399,400],{},"Lovable pone la misma advertencia en su propia documentación: las herramientas\nayudan a identificar problemas de seguridad habituales y no pueden garantizar\nuna seguridad completa. El nuestro la lleva también, porque una comprobación\nexterna automática no es una auditoría y una lista de hallazgos vacía no es una\ngarantía.",[10,402,403,404,407],{},"La única regla para cuando los dos no coinciden: ",[17,405,406],{},"si el escaneo de dentro sale\nlimpio y uno de fuera dice que una tabla respondió a una petición sin sesión\niniciada, actúa según la respuesta de fuera."," Es la respuesta que reciben tus\nusuarios, y es la que recibe cualquier otro. Ve y lee la política de esa tabla.",[10,409,410,411,415,416,113],{},"Si tu aplicación está en Supabase, la guía en lenguaje llano para esta\nplataforma es\n",[44,412,414],{"href":413},"\u002Fis-your-lovable-app-safe","¿es segura tu aplicación Lovable?",", y las\ncomprobaciones escritas como comandos que puedes correr tú están en\n",[44,417,419],{"href":418},"\u002Fblog\u002Fsupabase-security-checker","el verificador de seguridad de Supabase",[22,421,423],{"id":422},"qué-hacer-esta-semana","Qué hacer esta semana",[425,426,427],"key-takeaways",{},[148,428,429,432,435,438,441,449],{},[151,430,431],{},"Lee el resultado del Quick scan al publicar en vez de pasarlo de largo, y trata una etiqueta Critical como algo que se arregla antes de que la aplicación salga.",[151,433,434],{},"Lanza un Deep scan a mano. No se pone en marcha solo, así que a un proyecto donde nunca se ha lanzado uno nunca le han leído el código.",[151,436,437],{},"Después de publicar, escanea la dirección en vivo desde fuera. Es la única comprobación que hace la petición que hace un desconocido.",[151,439,440],{},"Lee la política de cada tabla que guarda personas. Una que deja pasar a todo el mundo deja la tabla abierta mientras el panel la da por protegida.",[151,442,443,444,448],{},"Comprueba que la clave de tu aplicación es la publicable. ",[44,445,447],{"href":446},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Qué claves de API son seguras en tu frontend"," explica cómo distinguir las dos.",[151,450,451],{},"Cuando las respuestas de dentro y de fuera se contradicen, tus usuarios reciben la de fuera.",[10,453,454,455,459],{},"Si tu aplicación Lovable usa Supabase, abre una ventana de navegación privada y\nrepasa la lista de Authentication y Policies antes del viernes.\n",[44,456,458],{"href":457},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","¿Puede cualquiera leer tu base de datos de Supabase?","\nes el mismo test escrito como comandos que puedes pegar en un terminal.",{"title":461,"searchDepth":462,"depth":462,"links":463},"",3,[464,466,467,468,469,470,471,472,473],{"id":24,"depth":465,"text":25},2,{"id":63,"depth":465,"text":64},{"id":91,"depth":465,"text":92},{"id":116,"depth":465,"text":117},{"id":139,"depth":465,"text":140},{"id":201,"depth":465,"text":202},{"id":339,"depth":465,"text":340},{"id":393,"depth":465,"text":394},{"id":422,"depth":465,"text":423},"Fundamentos de seguridad","\u002Fblog\u002Flovable-security-scan\u002Fcover-1200x630.png","Un panel de informe con una columna de marcas de visto y, detrás, saliendo del borde de la imagen, una base de datos con filas escapando.","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.",false,"md",[481,483,486,489,492],{"q":25,"a":482},"Sí, y son dos escaneos. El Quick scan corre solo cada vez que publicas y termina en segundos, cubriendo las reglas de acceso de tu base de datos, tus dependencias de npm y cualquier servidor MCP que tu aplicación exponga sin autenticación. El Deep scan lee todo el código de tu aplicación y tienes que lanzarlo tú desde la vista Security del proyecto. Los dos son gratis, y los dos leen tu proyecto en lugar de tu aplicación publicada.",{"q":484,"a":485},"¿Cuál es la diferencia entre el Quick scan y el Deep scan?","Velocidad y profundidad. El Quick scan corre un conjunto fijo de comprobaciones en segundos, automáticamente al publicar, y cubre la configuración de tu base de datos, tus dependencias y la exposición de MCP. El Deep scan incluye todo lo del Quick scan y después lee el código de tu aplicación buscando problemas propios de tu lógica y tus datos: control de acceso, endpoints sin autenticar, inyección, credenciales filtradas, pagos, seguridad de cuentas y datos personales expuestos. El Deep scan no corre solo mientras trabajas, así que a un proyecto donde nunca se ha lanzado uno nunca le han leído el código.",{"q":487,"a":488},"¿Es suficiente el escaneo de seguridad de Lovable?","Es una comprobación de verdad y ve cosas que ninguna herramienta externa puede ver, como tu árbol de dependencias y una tabla que tu frontend nunca nombra. Lo que no puede hacer es la petición que hacen tus visitantes. Una política puede existir, parecer válida y aun así devolver todas las filas, y lo único que lo resuelve es preguntarle a tu aplicación publicada desde fuera sin sesión iniciada. Lovable dice lo mismo en su propia documentación: las herramientas ayudan a identificar problemas de seguridad habituales y no pueden garantizar una seguridad completa.",{"q":490,"a":491},"¿Por qué un escáner externo encuentra cosas que el escaneo de Lovable dio por buenas?","Porque los dos leen objetos distintos. Un escaneo desde dentro lee tu proyecto: el esquema, las políticas, el árbol de dependencias, el código. Un escaneo desde fuera lee lo que la aplicación publicada le entrega a un desconocido sin sesión iniciada. Desde fuera, una tabla sin ninguna protección y una tabla con una política que deja pasar a todo el mundo dan la misma respuesta, que son filas. Esa respuesta es la que reciben tus usuarios y todos los demás, así que cuando los dos se contradicen es la que manda.",{"q":493,"a":494},"¿Necesito los dos?","Responden preguntas distintas, así que correr uno no sustituye al otro. El orden útil es el orden en que pasan las dos cosas: deja que el Quick scan corra al publicar, lanza un Deep scan antes de que algo real salga en vivo y después de añadir inicio de sesión, pagos o una tabla con personas dentro, y luego escanea la dirección publicada desde fuera. Un escaneo desde fuera tarda unos 20 segundos y no necesita cuenta.","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",[497,498,499,500,501,502,503,504,505],"escaneo de seguridad de lovable","lovable security scan","lovable deep scan","lovable quick scan","lovable revisa la seguridad","lovable rls","comprobación antes de publicar lovable","revisión de seguridad lovable","es suficiente el escaneo de lovable",{},true,"Escaneo de seguridad de Lovable: lo que no prueba","\u002Fblog\u002Flovable-security-scan","2026-09-24",{"title":5,"description":477},"blog\u002Flovable-security-scan",[514,515,516],"El escaneo de seguridad de Lovable son en realidad dos escaneos, ambos gratis: un Quick scan que corre solo cada vez que publicas, y un Deep scan que lanzas tú y que lee todo el código de tu aplicación.","Los dos leen tu proyecto desde dentro. Ninguno hace la petición que hace un desconocido, así que ninguno puede probar qué entrega tu aplicación publicada.","De las 3.553 aplicaciones Lovable cuya base de datos Supabase pudimos preguntar desde fuera, 2.017 respondieron a una petición sin sesión iniciada. Lanza el escaneo de dentro antes de publicar y uno de fuera después.","rD2cplFoM7MQE6zg0wG2gCG_7DMmZwt21_lEv9rxSpI",[519,525,531,537,543,549,555,561,567,573,579,585,591,598,604,610,615,621,622,628,634,639,645,651,657,663,669,675,681,687,693,699,705,711,717,723,728,733,739,745,751,757,763,769,775,781,787,793,799,805,811,817,823,828,833,839,845,850,855,861],{"path":520,"title":521,"description":522,"published":523,"category":474,"image":524,"draft":478},"\u002Fblog\u002Fbase44-security-scan","Escaneo de seguridad de Base44: lo que solo él ve","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.","2026-10-10","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":526,"title":527,"description":528,"published":529,"category":474,"image":530,"draft":478},"\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":532,"title":533,"description":534,"published":535,"category":474,"image":536,"draft":478},"\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":538,"title":539,"description":540,"published":541,"category":474,"image":542,"draft":478},"\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":544,"title":545,"description":546,"published":547,"category":474,"image":548,"draft":478},"\u002Fblog\u002Fis-base44-safe","¿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":550,"title":551,"description":552,"published":553,"category":474,"image":554,"draft":478},"\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":556,"title":557,"description":558,"published":559,"category":474,"image":560,"draft":478},"\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":562,"title":563,"description":564,"published":565,"category":474,"image":566,"draft":478},"\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":568,"title":569,"description":570,"published":571,"category":474,"image":572,"draft":478},"\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":574,"title":575,"description":576,"published":577,"category":474,"image":578,"draft":478},"\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":580,"title":581,"description":582,"published":583,"category":474,"image":584,"draft":478},"\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":586,"title":587,"description":588,"published":589,"category":474,"image":590,"draft":478},"\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":592,"title":593,"description":594,"published":595,"category":596,"image":597,"draft":478},"\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":599,"title":600,"description":601,"published":602,"category":596,"image":603,"draft":478},"\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":605,"title":606,"description":607,"published":608,"category":596,"image":609,"draft":478},"\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":611,"title":612,"description":613,"published":608,"category":474,"image":614,"draft":478},"\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":616,"title":617,"description":618,"published":619,"category":474,"image":620,"draft":478},"\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":509,"title":5,"description":477,"published":510,"category":474,"image":495,"draft":478},{"path":623,"title":624,"description":625,"published":626,"category":596,"image":627,"draft":478},"\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":629,"title":630,"description":631,"published":632,"category":474,"image":633,"draft":478},"\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":135,"title":635,"description":636,"published":637,"category":474,"image":638,"draft":478},"¿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":640,"title":641,"description":642,"published":643,"category":474,"image":644,"draft":478},"\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":646,"title":647,"description":648,"published":649,"category":474,"image":650,"draft":478},"\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":652,"title":653,"description":654,"published":655,"category":474,"image":656,"draft":478},"\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":658,"title":659,"description":660,"published":661,"category":474,"image":662,"draft":478},"\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":664,"title":665,"description":666,"published":667,"category":474,"image":668,"draft":478},"\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":670,"title":671,"description":672,"published":673,"category":474,"image":674,"draft":478},"\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":676,"title":677,"description":678,"published":679,"category":596,"image":680,"draft":478},"\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":682,"title":683,"description":684,"published":685,"category":596,"image":686,"draft":478},"\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":688,"title":689,"description":690,"published":691,"category":596,"image":692,"draft":478},"\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":694,"title":695,"description":696,"published":697,"category":474,"image":698,"draft":478},"\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":700,"title":701,"description":702,"published":703,"category":474,"image":704,"draft":478},"\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":706,"title":707,"description":708,"published":709,"category":474,"image":710,"draft":478},"\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":712,"title":713,"description":714,"published":715,"category":474,"image":716,"draft":478},"\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":718,"title":719,"description":720,"published":721,"category":474,"image":722,"draft":478},"\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":418,"title":724,"description":725,"published":726,"category":474,"image":727,"draft":478},"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":335,"title":729,"description":730,"published":731,"category":474,"image":732,"draft":478},"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":734,"title":735,"description":736,"published":737,"category":474,"image":738,"draft":478},"\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":740,"title":741,"description":742,"published":743,"category":474,"image":744,"draft":478},"\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":746,"title":747,"description":748,"published":749,"category":474,"image":750,"draft":478},"\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":752,"title":753,"description":754,"published":755,"category":596,"image":756,"draft":478},"\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":758,"title":759,"description":760,"published":761,"category":474,"image":762,"draft":478},"\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":764,"title":765,"description":766,"published":767,"category":596,"image":768,"draft":478},"\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":770,"title":771,"description":772,"published":773,"category":474,"image":774,"draft":478},"\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":776,"title":777,"description":778,"published":779,"category":474,"image":780,"draft":478},"\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":782,"title":783,"description":784,"published":785,"category":474,"image":786,"draft":478},"\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":788,"title":789,"description":790,"published":791,"category":474,"image":792,"draft":478},"\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":794,"title":795,"description":796,"published":797,"category":596,"image":798,"draft":478},"\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":800,"title":801,"description":802,"published":803,"category":596,"image":804,"draft":478},"\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":806,"title":807,"description":808,"published":809,"category":474,"image":810,"draft":478},"\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":812,"title":813,"description":814,"published":815,"category":474,"image":816,"draft":478},"\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":818,"title":819,"description":820,"published":821,"category":596,"image":822,"draft":478},"\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":457,"title":824,"description":825,"published":826,"category":474,"image":827,"draft":478},"¿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":829,"title":830,"description":831,"published":826,"category":474,"image":832,"draft":478},"\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":834,"title":835,"description":836,"published":837,"category":474,"image":838,"draft":478},"\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":840,"title":841,"description":842,"published":843,"category":596,"image":844,"draft":478},"\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":111,"title":846,"description":847,"published":848,"category":474,"image":849,"draft":478},"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":851,"title":852,"description":853,"published":848,"category":596,"image":854,"draft":478},"\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":856,"title":857,"description":858,"published":859,"category":596,"image":860,"draft":478},"\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":446,"title":862,"description":863,"published":859,"category":474,"image":864,"draft":478},"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",1791618971510]