[{"data":1,"prerenderedAt":773},["ShallowReactive",2],{"blog-es-safest-ai-app-builder":3,"blog-index-es":533},{"id":4,"title":5,"body":6,"category":492,"cover":493,"coverAlt":494,"description":495,"draft":496,"extension":497,"faq":498,"image":514,"keywords":515,"meta":521,"navigation":522,"ogTitle":28,"path":523,"published":524,"seo":525,"stem":526,"tldr":527,"updated":531,"__hash__":532},"blog_es\u002Fblog\u002Fsafest-ai-app-builder.md","¿Qué builder de apps con IA es más seguro? 30.998 apps escaneadas",{"type":7,"value":8,"toc":480},"minimark",[9,13,16,24,29,32,35,38,42,45,58,61,65,68,71,79,83,86,235,248,256,259,280,287,291,294,297,300,306,314,322,326,329,332,421,426,429,439,443,465,472],[10,11,12],"p",{},"Elegiste un builder antes de saber nada de ninguno de ellos. Puede que un hilo\nrecomendara uno, puede que te gustara la demo, puede que fuera el que usaba tu\namigo. Y en algún momento desde entonces has visto a alguien afirmar que el que\nelegiste es el inseguro, y te has preguntado si el builder de apps con IA más\nseguro era otro desde el principio.",[10,14,15],{},"Así que lo medimos. En agosto de 2026 escaneamos 30.998 apps activas publicadas\ndesde Lovable, Base44, Replit, v0 y Bolt, y pasamos las mismas nueve\ncomprobaciones externas por todas ellas.",[10,17,18,19,23],{},"Esta es la parte que las comparativas hacen mal: ",[20,21,22],"strong",{},"el builder que elegiste casi\nnunca es lo que decide si tu app está expuesta."," Los cinco salieron entre el\n99 % y el 100 % con al menos un hallazgo. Las diferencias reales entre ellos son\ngrandes, y son diferencias de ajustes por defecto más que de seguridad.",[25,26,28],"h2",{"id":27},"qué-builder-de-apps-con-ia-es-más-seguro","¿Qué builder de apps con IA es más seguro?",[10,30,31],{},"Ninguno, y la clasificación que buscas no existe.",[10,33,34],{},"Todos los builders de este escaneo produjeron apps con hallazgos, a un ritmo\nparecido, porque el hallazgo más frecuente lo pone el alojamiento y no la persona\nque construyó la app. Por debajo de ese titular los builders se separan mucho,\npero se separan en cosas como si tu código fuente se publica junto a tu app, no\nen si un desconocido puede leer a tus usuarios.",[10,36,37],{},"Lo que separa una A de una D es algo que hiciste después de elegir el builder.\nNormalmente es una decisión: conectaste una base de datos.",[25,39,41],{"id":40},"qué-medimos","Qué medimos",[10,43,44],{},"Las mismas nueve comprobaciones que pasaríamos por tu app, leídas desde fuera,\nsin iniciar sesión y sin acceso a la cuenta de nadie.",[10,46,47,48,51,52,57],{},"Escaneamos cada app entre el 12 y el 14 de agosto de 2026, y 30.998 dieron un\nresultado que pudimos clasificar. Cada porcentaje de abajo es una parte de las\napps en las que esa comprobación llegó a ",[20,49,50],{},"responder",", nunca una parte de todo\nlo que escaneamos. Una comprobación que no pudo completarse se registra como\ndesconocida, no como aprobada, y por eso los denominadores se mueven en las\ntablas. El método completo y los datos de base están\n",[53,54,56],"a",{"href":55},"\u002Fresearch\u002Fvibe-coded-app-security-2026","en el informe",".",[10,59,60],{},"Dos cosas que no hicimos. No iniciamos sesión en ningún sitio y no leímos las\nfilas de nadie: donde una tabla respondió, le preguntamos a la base cuántas filas\nentregaría y ahí paramos. Ninguna app aparece nombrada aquí ni en nada de lo que\npublicamos.",[25,62,64],{"id":63},"todos-los-builders-están-al-99-y-ese-número-dice-menos-de-lo-que-parece","Todos los builders están al 99 %, y ese número dice menos de lo que parece",[10,66,67],{},"Porque casi todo es un solo hallazgo, y ese hallazgo es de la plataforma.",[10,69,70],{},"Las cabeceras de seguridad que faltan aparecieron en 18.539 de 18.554 apps de\nLovable, en las 5.438 de Base44, en 1.790 de 1.790 de v0, en 1.121 de 1.123 de\nBolt y en 2.924 de 3.042 de Replit. Las cabeceras las envía lo que sirve tu app,\nasí que en el dominio de un builder son una propiedad de ese dominio e idénticas\nen todas las apps que están ahí.",[10,72,73,74,78],{},"Es un hallazgo real y conviene cerrarlo cuando pases a tu propio dominio. Pero es\nla ",[53,75,77],{"href":76},"\u002Fblog\u002Fmissing-security-headers","línea menos urgente de un informe",", y es la\nmayor parte de lo que cuenta la frase \"el 99 % de las apps tiene un problema\".",[25,80,82],{"id":81},"la-diferencia-real-entre-builders-son-los-ajustes-por-defecto","La diferencia real entre builders son los ajustes por defecto",[10,84,85],{},"Cada builder entrega un juego distinto de ajustes por defecto, y esos aparecen en\ncasi todas las apps que fabrica.",[87,88,89,118],"table",{},[90,91,92],"thead",{},[93,94,95,99,103,106,109,112,115],"tr",{},[96,97,98],"th",{},"Builder",[96,100,102],{"align":101},"right","Apps escaneadas",[96,104,105],{"align":101},"Al menos un hallazgo",[96,107,108],{"align":101},"Código fuente publicado",[96,110,111],{"align":101},"Hallazgo cross-origin",[96,113,114],{"align":101},"Clave secreta publicada",[96,116,117],{"align":101},"Nota D o F",[119,120,121,145,170,192,213],"tbody",{},[93,122,123,127,130,133,136,139,142],{},[124,125,126],"td",{},"Lovable",[124,128,129],{"align":101},"18.554",[124,131,132],{"align":101},"99 %",[124,134,135],{"align":101},"225 de 18.553",[124,137,138],{"align":101},"8 de 18.518",[124,140,141],{"align":101},"822 (4 %)",[124,143,144],{"align":101},"407",[93,146,147,150,153,156,159,164,167],{},[124,148,149],{},"Base44",[124,151,152],{"align":101},"5.438",[124,154,155],{"align":101},"100 %",[124,157,158],{"align":101},"3.229 de 5.434 (59 %)",[124,160,161],{"align":101},[20,162,163],{},"5.418 de 5.419 (99 %)",[124,165,166],{"align":101},"103 (2 %)",[124,168,169],{"align":101},"2",[93,171,172,175,178,180,183,186,189],{},[124,173,174],{},"Replit",[124,176,177],{"align":101},"3.042",[124,179,132],{"align":101},[124,181,182],{"align":101},"168 de 3.041 (6 %)",[124,184,185],{"align":101},"1.129 de 3.037 (37 %)",[124,187,188],{"align":101},"219 (7 %)",[124,190,191],{"align":101},"9",[93,193,194,197,200,202,205,208,211],{},[124,195,196],{},"v0",[124,198,199],{"align":101},"1.790",[124,201,155],{"align":101},[124,203,204],{"align":101},"0 de 1.790",[124,206,207],{"align":101},"0 de 1.786",[124,209,210],{"align":101},"0",[124,212,210],{"align":101},[93,214,215,218,221,223,226,229,232],{},[124,216,217],{},"Bolt",[124,219,220],{"align":101},"1.123",[124,222,155],{"align":101},[124,224,225],{"align":101},"13 de 1.123",[124,227,228],{"align":101},"5 de 1.120",[124,230,231],{"align":101},"75 (7 %)",[124,233,234],{"align":101},"15",[10,236,237,238,242,243,247],{},"La columna de source maps es la que hay que leer con cuidado, porque en Base44 no\nmide lo mismo que en las otras cuatro. Reabrimos 30 apps de Base44 marcadas en\nseptiembre: en 27, el único mapa que respondía era ",[239,240,241],"code",{},"\u002Fstatic\u002Fjs\u002Fbadge.js.map",", el\ndel script de distintivo de Base44, y en ninguna de las 30 había un mapa que\ncubriera los archivos del dueño. Así que ese 59 % es una plataforma publicando\nuno de sus propios archivos en cada app que aloja, y no 3.229 dueños perdiendo su\ncódigo. En Lovable, Replit y Bolt la misma columna sí significa el código del\ndueño, y por eso 1 %, 6 % y 59 % no se leen de arriba abajo como una\nclasificación. ",[53,244,246],{"href":245},"\u002Fblog\u002Fbase44-source-maps","Lo que encontramos dentro de esos mapas de Base44","\nes el relato completo.",[10,249,250,251,255],{},"La columna del 99 % es la de verdad, y también es cosa de Base44: la plataforma\nfija el CORS para cada app que aloja y no ofrece ningún ajuste por app. Código\nfuente publicado significa, cuando es el tuyo, que los archivos originales detrás\nde tu app se pueden leer desde las herramientas de desarrollo del navegador.\n",[53,252,254],{"href":253},"\u002Fblog\u002Fsource-maps-exposed-in-production","Qué expone y qué no"," merece una lectura\nsi estás en una de las otras cuatro.",[10,257,258],{},"La columna de las claves secretas es la que todo el mundo espera que domine, y no\ndomina. Una clave digna de mención apareció en el 4 % al 7 % de las apps en tres\nde los cinco builders, y en ninguna de las apps de v0.",[10,260,261,262,265,266,269,270,265,273,276,277,57],{},"Si quieres la versión en lenguaje claro para el builder que de verdad usas, cada\nuno tiene su página: ",[53,263,126],{"href":264},"\u002Fis-your-lovable-app-safe",",\n",[53,267,149],{"href":268},"\u002Fis-your-base44-app-safe",", ",[53,271,174],{"href":272},"\u002Fis-your-replit-app-safe",[53,274,196],{"href":275},"\u002Fis-your-v0-app-safe"," y ",[53,278,217],{"href":279},"\u002Fis-your-bolt-app-safe",[10,281,282,283,57],{},"O sáltate la lectura: nuestro escaneo gratuito pasa estas mismas comprobaciones\npor tu sitio en vivo y te dice en cuáles tropieza tu app. Unos 20 segundos, sin\ncuenta: ",[53,284,286],{"href":285},"\u002F#scan","escanea tu app",[25,288,290],{"id":289},"qué-decide-de-verdad-una-d-o-una-f","Qué decide de verdad una D o una F",[10,292,293],{},"Una base de datos, y lo que hiciste con ella.",[10,295,296],{},"Lovable produjo 407 apps con nota D o F de 18.554. v0 no produjo ninguna de\n1.790. Parece un veredicto sobre los dos builders hasta que miras qué son esas\napps: el 35 % de las de Lovable nombra un proyecto de base de datos, frente a\nalrededor del 1 % de las de v0.",[10,298,299],{},"Las comprobaciones que pueden producir una D o una F son casi todas\ncomprobaciones de base de datos. Una app sin base tiene menos cosas que puedan\nsalir mal y menos cosas que mirar. Así que la fila de Lovable no mide un builder\npeor, mide un builder cuyos usuarios conectan bases de datos, que es la mayor\nparte del motivo por el que la gente lo elige.",[301,302],"diagram",{"alt":303,"caption":304,"src":305},"Dos apps dibujadas una al lado de la otra como paneles idénticos. La de la izquierda tiene un único bloque vacío con tres marcas verdes debajo y la letra A en su esquina superior. La de la derecha tiene el mismo bloque y las mismas tres marcas, con una línea de puntos que baja hasta un cilindro de base de datos rojo y una cruz roja, y la letra D en su esquina superior.","Las comprobaciones exteriores salen igual en las dos. Todo lo que puede producir una nota seria vive en la parte que conectaste tú.","\u002Fblog\u002Fsafest-ai-app-builder\u002Fwhere-a-grade-comes-from-1600x700.png",[10,307,308,309,313],{},"De las 3.553 apps de Lovable cuya base nos respondió, 2.017 tenían al menos una\ntabla que un desconocido podía leer sin iniciar sesión. Ese es\n",[53,310,312],{"href":311},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","el hallazgo que conviene arreglar primero",",\ny no tiene nada que ver con qué builder generó tu interfaz.",[10,315,316,317,321],{},"En Lovable esa cifra es lo bastante grande como para merecer su propio\nartículo: ",[53,318,320],{"href":319},"\u002Fblog\u002Fis-lovable-safe","lo que vimos en 18.554 aplicaciones Lovable","\npasa las mismas nueve comprobaciones por la cohorte más grande que tenemos.",[25,323,325],{"id":324},"por-qué-no-vamos-a-clasificarlos","Por qué no vamos a clasificarlos",[10,327,328],{},"Porque en tres de los cinco no pudimos comprobar bases suficientes para decir\nnada en absoluto.",[10,330,331],{},"Esta es la parte de los datos que toda tabla de clasificación deja fuera:",[87,333,334,349],{},[90,335,336],{},[93,337,338,340,343,346],{},[96,339,98],{},[96,341,342],{"align":101},"Nombra un proyecto de base",[96,344,345],{"align":101},"Bases que nos respondieron",[96,347,348],{},"Tenía una tabla legible",[119,350,351,364,378,393,408],{},[93,352,353,355,358,361],{},[124,354,126],{},[124,356,357],{"align":101},"35 %",[124,359,360],{"align":101},"3.553",[124,362,363],{},"2.017, o el 57 %",[93,365,366,368,371,375],{},[124,367,149],{},[124,369,370],{"align":101},"27 %",[124,372,373],{"align":101},[20,374,169],{},[124,376,377],{},"2 de las 2 que alcanzamos",[93,379,380,382,385,390],{},[124,381,217],{},[124,383,384],{"align":101},"24 %",[124,386,387],{"align":101},[20,388,389],{},"35",[124,391,392],{},"27 de las 35 que alcanzamos",[93,394,395,397,400,405],{},[124,396,174],{},[124,398,399],{"align":101},"1 %",[124,401,402],{"align":101},[20,403,404],{},"5",[124,406,407],{},"4 de las 5 que alcanzamos",[93,409,410,412,414,418],{},[124,411,196],{},[124,413,399],{"align":101},[124,415,416],{"align":101},[20,417,210],{},[124,419,420],{},"nada que comprobar",[301,422],{"alt":423,"caption":424,"src":425},"Cinco filas, cada una encabezada por el logo de un builder y el número de sus apps que escaneamos. Cada fila dibuja esas apps como una barra pálida con las bases que nos respondieron rellenas en sólido. La parte sólida de Lovable es un bloque ancho que marca 3.553; las de Base44, Replit y Bolt son hilos que marcan 2, 5 y 35, y la de v0 es un círculo vacío de puntos que marca 0.","La parte sólida de cada barra es lo que pudimos comprobar de verdad. Cuatro de las cinco son demasiado finas para sostener un porcentaje.","\u002Fblog\u002Fsafest-ai-app-builder\u002Fwhat-we-could-check-1600x620.png",[10,427,428],{},"Mira la fila de Base44. Más de una cuarta parte de sus apps nombra un proyecto de\nbase de datos, y exactamente dos de esas bases llegaron a respondernos. No vamos\na convertir dos apps en una tasa y ponerla al lado de una cifra construida sobre\n3.553. Y nadie más que haya escaneado desde fuera puede hacerlo tampoco, diga lo\nque diga su tabla comparativa.",[430,431,433],"callout",{"type":432},"warn",[10,434,435,438],{},[20,436,437],{},"Una comprobación que no pudo completarse no es una comprobación aprobada."," Esa\nes la regla que decide casi todo lo de arriba, y es la que desaparece\ndiscretamente en cuanto un escaneo se convierte en una clasificación. Una app a\nla que no pudimos llegar es desconocida. Una base que nunca respondió es\ndesconocida. Contar cualquiera de las dos como limpia produce un gráfico más\nordenado y falso, y es lo peor que un informe de seguridad puede hacerle a\nalguien que después deja de preocuparse.",[25,440,442],{"id":441},"qué-comprobar-en-tu-propia-app","Qué comprobar en tu propia app",[444,445,446],"key-takeaways",{},[447,448,449,453,456,459,462],"ul",{},[450,451,452],"li",{},"Deja de buscar un builder más seguro. Nada en estos datos justifica una mudanza, y mudarse reconstruye tu app entera para cambiar una fila por la que nunca te calificaron.",[450,454,455],{},"Empieza por tus tablas de base de datos, sea cual sea el builder que usaste. Una tabla que un desconocido puede leer es el hallazgo que vacía una app, y es lo único aquí que solo puedes arreglar tú.",[450,457,458],{},"Averigua si tu builder publica tu código fuente y desactívalo si lo hace. Es un ajuste, y en una de las cinco plataformas de arriba viene activado de fábrica en tres de cada cinco apps.",[450,460,461],{},"Trata el hallazgo de las cabeceras como mantenimiento. Es real, afecta a casi todas las apps en el dominio de un builder, y no es lo que alguien va a usar en tu contra.",[450,463,464],{},"Comprueba cualquier clave en tu código publicado antes de preocuparte por nada más de esta página, porque ese es el único hallazgo que ya está costando dinero mientras lees.",[10,466,467,468,57],{},"Todo esto se puede comprobar a mano. Mantener la respuesta cierta el mes que\nviene es la parte que no se queda hecha, y para eso existe Reeve Care: vuelve a\npasar estas mismas comprobaciones según un calendario y te avisa cuando una\nrespuesta empeora, y guarda copias verificadas de tu base fuera de la cuenta de\ntu proveedor para que haya algo que devolver. Esa segunda mitad importa aquí\nporque nosotros solo comprobamos la lectura, y la misma regla permisiva que deja\na un desconocido leer una tabla suele dejarle escribir en ella.\n",[53,469,471],{"href":470},"\u002Fpricing","Qué vigila y cuánto cuesta",[10,473,474,475,479],{},"Si prefieres avanzar con una lista, la\n",[53,476,478],{"href":477},"\u002Fchecklist","lista de seguridad de 10 minutos"," cubre el conjunto en lenguaje\nclaro.",{"title":481,"searchDepth":482,"depth":482,"links":483},"",3,[484,486,487,488,489,490,491],{"id":27,"depth":485,"text":28},2,{"id":40,"depth":485,"text":41},{"id":63,"depth":485,"text":64},{"id":81,"depth":485,"text":82},{"id":289,"depth":485,"text":290},{"id":324,"depth":485,"text":325},{"id":441,"depth":485,"text":442},"Fundamentos de seguridad","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcover-1200x630.png","Cinco fichas blancas idénticas en fila sobre fondo oscuro, del mismo tamaño y bien repartidas, cada una con el logo de un builder.","¿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.",false,"md",[499,502,505,508,511],{"q":500,"a":501},"¿Qué builder hace las apps más seguras?","Ninguno de forma medible. En 30.998 apps activas, todos los builders que escaneamos salieron entre el 99 % y el 100 % con al menos un hallazgo, y el grueso son cabeceras de seguridad que faltan, puestas por el alojamiento y no por ti. Las diferencias entre builders son diferencias de ajustes por defecto: qué se publica junto a tu app y cómo está configurada la conexión con tu API. Ninguno de esos ajustes produce una nota seria.",{"q":503,"a":504},"¿Importa siquiera qué builder elegí?","Importa para lo que heredas el primer día, y bastante poco para lo que pasa después. Algunos builders publican tu código fuente con cada app y otros no. Algunos ponen por defecto una regla cross-origin abierta de par en par y otros no. Eso conviene saberlo y casi siempre conviene cambiarlo. Pero el hallazgo que de verdad le cuesta los datos a la gente es una tabla de base de datos legible, y eso se consigue conectando una base y escribiendo una regla permisiva. Se puede hacer en cualquier builder.",{"q":506,"a":507},"Todas las apps de mi builder fallan la comprobación de cabeceras. ¿Es culpa mía?","No, y normalmente tampoco puedes cambiarlo desde dentro del builder. Las cabeceras de seguridad las envía lo que sirve tu app, así que en un dominio del builder son el ajuste por defecto de la plataforma e idénticas en todas las apps que están ahí. Por eso la cifra es del 99 % o del 100 % en los cinco. Por ese mismo motivo es la línea menos urgente de un informe: es real, conviene cerrarla cuando pases a tu propio dominio, y no dice nada sobre si alguien puede llegar a tus datos.",{"q":509,"a":510},"v0 no tuvo ninguna app con nota D o F. ¿Eso lo hace el más seguro?","Lo hace el que tiene menos bases de datos conectadas. Solo un 1 % aproximado de las apps de v0 que escaneamos nombraba algún proyecto de base de datos, frente al 35 % de las de Lovable, y las comprobaciones que producen una D o una F son comprobaciones de base de datos. Una app sin base tiene menos cosas que puedan salir mal y menos cosas que podamos mirar. Lee esa fila como información sobre qué son esas apps, no sobre lo bien que las protege el builder.",{"q":512,"a":513},"¿Debería mudar mi app a otro builder para que sea más segura?","No. Mudarse significa reconstruirlo todo y no cambia casi nada de esta lista, porque los hallazgos que importan viven en los servicios que conectaste y no en el builder que generó tu código. Los dos que merecen la pena son las reglas de tus tablas y cualquier clave secreta que esté en tu código publicado. Los dos te siguen a cualquier builder al que te mudes, y los dos se arreglan donde ya estás.","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",[516,517,518,519,520],"builder de apps con ia más seguro","qué builder de apps con ia es más seguro","comparativa seguridad builders ia","lovable vs bolt seguridad","son seguras las apps hechas con ia",{},true,"\u002Fblog\u002Fsafest-ai-app-builder","2026-09-11",{"title":5,"description":495},"blog\u002Fsafest-ai-app-builder",[528,529,530],"No hay un builder de apps con IA más seguro. Los cinco que escaneamos salieron entre el 99 % y el 100 % con al menos un hallazgo, y casi todo eso es una cabecera de navegador que pone su alojamiento.","Lo que cambia entre builders son los ajustes por defecto, y las distancias son enormes. Los 3.229 source maps de Base44 sobre 5.434 son el script de distintivo de la plataforma, no la app de nadie; los 225 de Lovable sobre 18.553 son código del dueño.","Lo que decide una nota seria no es el builder. Es si conectaste una base de datos y dejaste una tabla legible.","2026-09-21","o8chU6D0QlXyYjHcFtHt3_JF-mDf_3WZNOqY4YoN_mE",[534,541,547,551,557,563,569,574,580,586,592,598,604,605,611,617,623,629,635,641,646,652,658,664,670,676,682,688,694,700,706,712,718,724,730,735,739,745,751,757,762,768],{"path":535,"title":536,"description":537,"published":538,"category":539,"image":540,"draft":496},"\u002Fblog\u002Fsupabase-backup-auth-users","Por qué tu dump de Supabase no tiene usuarios dentro","Ejecuta supabase db dump por sí solo y obtienes la forma de tu base de datos y ninguna de sus filas, sin el esquema auth donde viven tus usuarios.","2026-09-23","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":542,"title":543,"description":544,"published":545,"category":492,"image":546,"draft":496},"\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":319,"title":548,"description":549,"published":531,"category":492,"image":550,"draft":496},"¿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.","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":552,"title":553,"description":554,"published":555,"category":492,"image":556,"draft":496},"\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":558,"title":559,"description":560,"published":561,"category":492,"image":562,"draft":496},"\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":564,"title":565,"description":566,"published":567,"category":492,"image":568,"draft":496},"\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":245,"title":570,"description":571,"published":572,"category":492,"image":573,"draft":496},"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":575,"title":576,"description":577,"published":578,"category":492,"image":579,"draft":496},"\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":581,"title":582,"description":583,"published":584,"category":492,"image":585,"draft":496},"\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":587,"title":588,"description":589,"published":590,"category":539,"image":591,"draft":496},"\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":593,"title":594,"description":595,"published":596,"category":539,"image":597,"draft":496},"\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":599,"title":600,"description":601,"published":602,"category":539,"image":603,"draft":496},"\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":523,"title":5,"description":495,"published":524,"category":492,"image":514,"draft":496},{"path":606,"title":607,"description":608,"published":609,"category":492,"image":610,"draft":496},"\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":612,"title":613,"description":614,"published":615,"category":492,"image":616,"draft":496},"\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":618,"title":619,"description":620,"published":621,"category":492,"image":622,"draft":496},"\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":624,"title":625,"description":626,"published":627,"category":492,"image":628,"draft":496},"\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":630,"title":631,"description":632,"published":633,"category":492,"image":634,"draft":496},"\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":636,"title":637,"description":638,"published":639,"category":492,"image":640,"draft":496},"\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":76,"title":642,"description":643,"published":644,"category":492,"image":645,"draft":496},"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":647,"title":648,"description":649,"published":650,"category":492,"image":651,"draft":496},"\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":653,"title":654,"description":655,"published":656,"category":492,"image":657,"draft":496},"\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":659,"title":660,"description":661,"published":662,"category":539,"image":663,"draft":496},"\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":665,"title":666,"description":667,"published":668,"category":492,"image":669,"draft":496},"\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":671,"title":672,"description":673,"published":674,"category":539,"image":675,"draft":496},"\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":677,"title":678,"description":679,"published":680,"category":492,"image":681,"draft":496},"\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":683,"title":684,"description":685,"published":686,"category":492,"image":687,"draft":496},"\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":689,"title":690,"description":691,"published":692,"category":492,"image":693,"draft":496},"\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":695,"title":696,"description":697,"published":698,"category":492,"image":699,"draft":496},"\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":701,"title":702,"description":703,"published":704,"category":539,"image":705,"draft":496},"\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":707,"title":708,"description":709,"published":710,"category":539,"image":711,"draft":496},"\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":713,"title":714,"description":715,"published":716,"category":492,"image":717,"draft":496},"\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":719,"title":720,"description":721,"published":722,"category":492,"image":723,"draft":496},"\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":725,"title":726,"description":727,"published":728,"category":539,"image":729,"draft":496},"\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":311,"title":731,"description":732,"published":733,"category":492,"image":734,"draft":496},"¿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":253,"title":736,"description":737,"published":733,"category":492,"image":738,"draft":496},"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":740,"title":741,"description":742,"published":743,"category":492,"image":744,"draft":496},"\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":746,"title":747,"description":748,"published":749,"category":539,"image":750,"draft":496},"\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":752,"title":753,"description":754,"published":755,"category":492,"image":756,"draft":496},"\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":758,"title":759,"description":760,"published":755,"category":539,"image":761,"draft":496},"\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":763,"title":764,"description":765,"published":766,"category":539,"image":767,"draft":496},"\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":769,"title":770,"description":771,"published":766,"category":492,"image":772,"draft":496},"\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",1790150954088]