[{"data":1,"prerenderedAt":783},["ShallowReactive",2],{"blog-es-base44-source-maps":3,"blog-index-es":541},{"id":4,"title":5,"body":6,"category":499,"cover":500,"coverAlt":501,"description":502,"draft":503,"extension":504,"faq":505,"image":521,"keywords":522,"meta":530,"navigation":531,"ogTitle":5,"path":532,"published":533,"seo":534,"stem":535,"tldr":536,"updated":533,"__hash__":540},"blog_es\u002Fblog\u002Fbase44-source-maps.md","Seguridad en Base44: qué marca un escaneo y qué te toca arreglar a ti",{"type":7,"value":8,"toc":488},"minimark",[9,13,21,24,29,32,41,170,173,176,179,183,186,198,206,212,215,218,221,229,233,236,243,251,258,266,270,273,289,295,305,310,314,317,344,347,430,434,466,469,476],[10,11,12],"p",{},"Escaneaste tu app de Base44 y el informe volvió con una B y tres líneas ámbar\ndebajo: faltan cabeceras de seguridad, una API abierta a cualquier web, y tu\ncódigo fuente original publicado. O alguien técnico miró por ti y dijo las\nmismas tres cosas con una voz más preocupada. Para una app cuyo código nunca\nhas leído, la última es la que más pesa.",[10,14,15,16,20],{},"Aquí está la parte que guía tras guía sobre la seguridad en Base44 se\nequivoca: ",[17,18,19],"strong",{},"casi todas las líneas de ese informe hablan de Base44."," Tres de\nlos cuatro hallazgos que aparecen en casi todas las apps los fija la\nplataforma, para todas las apps que aloja. Y uno de los tres es una frase que\nnuestro propio escaneo formula mal. Este artículo existe porque volvimos a leer\nlo que había encontrado.",[10,22,23],{},"Piensa en tu app como un piso en un edificio que es de Base44. Un escaneo lee\nel edificio desde la calle. La cerradura del portal, el rótulo de encima, la\nregla sobre quién puede mirar por las ventanas: eso lo decidió el casero, y\ntodos los pisos lo comparten. Lo que metiste tú es una lista más corta, y el\nresto de este artículo recorre el informe línea a línea para decir qué es de\nquién.",[25,26,28],"h2",{"id":27},"qué-encuentra-un-escaneo-de-seguridad-en-base44-en-casi-todas-las-apps","Qué encuentra un escaneo de seguridad en Base44 en casi todas las apps",[10,30,31],{},"Tres hallazgos en casi todas, un cuarto en cerca de la mitad, y los cuatro\ndecididos por Base44.",[10,33,34,35,40],{},"En agosto de 2026 pasamos\n",[36,37,39],"a",{"href":38},"\u002Fresearch\u002Fvibe-coded-app-security-2026","las mismas nueve comprobaciones"," a\n30.998 apps vibe-coded en producción, 5.438 de ellas publicadas en Base44. A\nlas 5.438 les faltaban cabeceras de seguridad. 5.417 respondieron a una\npetición desde una web inventada con una cabecera CORS comodín. 3.229 de\nellas, el 59 %, servían un source map. 2.705 tenían una dirección, nombrada en\nel propio código de la app, que respondía a una petición sin sesión y devolvía\ndatos.",[42,43,44,69],"table",{},[45,46,47],"thead",{},[48,49,50,54,57,60,63,66],"tr",{},[51,52,53],"th",{},"Builder",[51,55,56],{},"Apps",[51,58,59],{},"Source map publicado",[51,61,62],{},"Hallazgo CORS",[51,64,65],{},"Una clave en el bundle",[51,67,68],{},"Nota D o F",[70,71,72,93,113,133,153],"tbody",{},[48,73,74,78,81,84,87,90],{},[75,76,77],"td",{},"Base44",[75,79,80],{},"5.438",[75,82,83],{},"3.229 (59 %)",[75,85,86],{},"5.418 (99 %)",[75,88,89],{},"103 (2 %)",[75,91,92],{},"2",[48,94,95,98,101,104,107,110],{},[75,96,97],{},"Lovable",[75,99,100],{},"18.554",[75,102,103],{},"225 (1 %)",[75,105,106],{},"8 (menos del 1 %)",[75,108,109],{},"822 (4 %)",[75,111,112],{},"407",[48,114,115,118,121,124,127,130],{},[75,116,117],{},"Replit",[75,119,120],{},"3.042",[75,122,123],{},"168 (6 %)",[75,125,126],{},"1.129 (37 %)",[75,128,129],{},"219 (7 %)",[75,131,132],{},"9",[48,134,135,138,141,144,147,150],{},[75,136,137],{},"Bolt",[75,139,140],{},"1.123",[75,142,143],{},"13 (1 %)",[75,145,146],{},"5 (menos del 1 %)",[75,148,149],{},"75 (7 %)",[75,151,152],{},"15",[48,154,155,158,161,164,166,168],{},[75,156,157],{},"v0",[75,159,160],{},"1.790",[75,162,163],{},"0",[75,165,163],{},[75,167,163],{},[75,169,163],{},[10,171,172],{},"Cada porcentaje es sobre las apps en las que esa comprobación obtuvo\nrespuesta, y por eso las bases difieren un poco del número de apps. Una\ncomprobación que no pudo llegar a una app deja esa app fuera. Nunca cuenta\ncomo limpia.",[10,174,175],{},"Lee la fila de Base44 contra la de Lovable. En Lovable, los dos primeros\nhallazgos casi nunca aparecen, porque el alojamiento de Lovable fija ambos al\nrevés. En Base44 aparecen casi siempre. Una columna tan uniforme en miles de\napps cuyos dueños nunca hablaron entre sí es el aspecto que tiene un ajuste de\nplataforma visto desde fuera. Nadie lo eligió en su propia app.",[10,177,178],{},"Las dos últimas columnas se deciden dentro de cada app, y cuentan la otra\nmitad. Una clave en el código comprimido apareció en el 2 % de las apps de\nBase44 frente al 4 % de las de Lovable, y 2 apps de Base44 entre 5.438 sacaron\nuna D, frente a 407 apps de Lovable entre 18.554. Esas dos apps de Base44 están\nen la última sección.",[25,180,182],{"id":181},"el-hallazgo-de-source-map-en-una-app-de-base44-es-la-insignia","El hallazgo de source map en una app de Base44 es la insignia",[10,184,185],{},"Todos los source maps que respondían en las apps de Base44 que reabrimos\npertenecían al script de la insignia de Base44. Ninguno contenía el código del\ndueño.",[10,187,188,189,192,193,197],{},"Un ",[17,190,191],{},"source map"," es un archivo que la herramienta de build escribe junto al\nJavaScript comprimido que sirve tu web. Contiene los archivos originales, sus\nnombres y cada comentario, para que un error pueda señalar la línea que\nescribiste en lugar del carácter 48.000 de una sola línea enorme. Cuando el map\nestá publicado, cualquiera que pulse F12 lee el proyecto tal como se veía en el\neditor, y\n",[36,194,196],{"href":195},"\u002Fblog\u002Fsource-maps-exposed-in-production","nuestro artículo anterior"," cuenta lo\nque eso cuesta en una app cuyo map es el tuyo.",[10,199,200,201,205],{},"En Base44 el map es de otro. El 16 de septiembre de 2026 volvimos a 30 apps que\nnuestro escaneo de agosto había marcado y leímos qué contenía cada map. En 27\nde ellas el único map que respondía era ",[202,203,204],"code",{},"\u002Fstatic\u002Fjs\u002Fbadge.js.map",", el map del\npequeño script que dibuja la insignia de Base44 en la página, y lo que revela\nes el código de Base44 para esa insignia. En las otras 3 no respondió ningún\nmap. En ninguna de las 30 un map cubría los archivos del dueño. Esos archivos\nsalieron comprimidos y sin map en todas las apps que abrimos, el primer archivo\nque carga la página y cada pieza que carga después.",[207,208],"diagram",{"alt":209,"caption":210,"src":211},"Dos paneles. A la izquierda, bajo el logo de Base44, cada archivo de script de la app tiene un anillo punteado donde estaría un map, y solo el script de la insignia tiene un map, que lleva a un pequeño logo de Base44. A la derecha, bajo el logo de Lovable, el script principal de la app tiene un map, y el map se abre en una carpeta de archivos legibles.","En una app de Base44 el único map que responde pertenece al script de la insignia, y contiene el código de Base44. En una app de Lovable el map son los propios archivos del dueño.","\u002Fblog\u002Fbase44-source-maps\u002Fwhose-map-answers-1600x720.png",[10,213,214],{},"Así que el 59 % cuenta otra cosa distinta de código publicado. De las 30 apps\nmarcadas, 27 de las 28 que respondían siguen llevando el script de la insignia\nen su página, y de 30 apps que nunca se marcaron, 29 no lo llevan. La cifra que\nse lee como «tres de cada cinco apps de Base44 publican su código» está más\ncerca de «tres de cada cinco apps de Base44 muestran la insignia».",[10,216,217],{},"Eso deja una línea de nuestro propio informe de la que responder. Dice «Tu\ncódigo fuente original está publicado», y en una app de Base44 es cierta para\nun archivo y falsa para tu app. La comprobación hizo lo que se construyó para\nhacer: seguir la dirección al final de un script y contar un map que responde.\nAquí el script es del casero. En Lovable, Replit y Bolt la misma línea\nsignifica lo que dice. De 11 apps marcadas de esos builders que reabrimos, 9\nservían un map de las propias páginas y componentes del dueño, y en las otras\n2 ya no respondía ningún map.",[10,219,220],{},"Lo que significa para ti es que nada tuyo está en ese map. La comprobación que\nvale la pena es la otra: si algo que pegaste en la app está en el archivo\ncomprimido que cada visitante ya recibe. Eso viene más abajo.",[10,222,223,224,228],{},"Nuestro escaneo gratuito lee tu app de Base44 en producción desde fuera, las\nnueve comprobaciones, en unos 20 segundos y sin cuenta, y escribe «No se pudo\ncomprobar» en todo lo que no pudo responder, en lugar de una marca de visto:\n",[36,225,227],{"href":226},"\u002Fsecurity-scanner","escanea tu app",".",[25,230,232],{"id":231},"el-comodín-cors-lo-fija-base44-y-detrás-no-responde-nada-privado","El comodín CORS: lo fija Base44, y detrás no responde nada privado",[10,234,235],{},"No puedes cambiarlo, y en las apps de Base44 que miramos no hay datos privados\ndetrás.",[10,237,238,239,242],{},"El hallazgo es una línea en las respuestas de tu servidor,\n",[202,240,241],{},"Access-Control-Allow-Origin: *",", que le dice al navegador de un visitante que\nuna página de cualquier otra web puede leer esa respuesta concreta. La\ndocumentación de Base44 dice de dónde sale (leída el 16 de septiembre de 2026):\n«Per-app CORS configuration is not currently available. Base44 manages CORS at\nthe platform level.» Todas las apps de la plataforma la envían, y así es como\n5.417 apps de 5.419 acabaron compartiendo un mismo hallazgo.",[10,244,245,246,250],{},"Que un comodín importe depende de qué responde detrás, y\n",[36,247,249],{"href":248},"\u002Fblog\u002Fcors-wildcard-security-risk","el artículo largo"," explica por qué. La\nversión corta: la cabecera llega después de que la respuesta ya se envió, y\nsolo la lee un navegador, así que estrecharla impediría que las páginas de\notras webs leyeran tu app, y a nadie más. Lo que hay detrás en una app de\nBase44 es la propia app, la página, el código comprimido, la insignia, y todo\neso lo descarga cada visitante de todos modos.",[10,252,253,254,257],{},"El cuarto hallazgo es donde un comodín importaría. En 2.705 apps de Base44,\ncerca de la mitad, una dirección nombrada en el código de la app respondía a\nuna petición sin sesión y devolvía datos. Reabrimos 12 de ellas el 16 de\nseptiembre. En seis ya no respondía nada. En las otras seis la dirección que\nrespondía era la misma cada vez, ",[202,255,256],{},"\u002Fapi\u002Fconsent\u002Fconfig",", y lo que devuelve son\nlos ajustes de consentimiento de cookies de la app: si hay un aviso de\nconsentimiento activo, qué reglas regionales aplican, cuántos meses se recuerda\nla respuesta. Es configuración. Ahí no hay filas de nadie.",[10,259,260,261,265],{},"Tus datos no viajan por ese camino en Base44. Tu app le pregunta al backend de\nBase44, el backend aplica las reglas de permisos que pusiste en cada tabla, y\nla respuesta vuelve por la misma puerta. Un escaneo desde fuera no puede ver\nesas reglas en absoluto, y por eso la ",[36,262,264],{"href":263},"\u002Fis-your-base44-app-safe","guía de Base44","\ndedica su tiempo a lo que un desconocido puede alcanzar, y te deja tus reglas a\nti.",[25,267,269],{"id":268},"qué-es-tuyo-en-una-app-de-base44","Qué es tuyo en una app de Base44",[10,271,272],{},"Una lista corta, y las dos notas D del barrido salieron de ella.",[10,274,275,278,279,283,284,288],{},[17,276,277],{},"Una clave que pegaste."," 103 de las 5.438 apps de Base44, el 2 %, servían\nalgo con forma de clave en el código que descarga cada visitante. 95 de ellas\neran claves de API de Google, que\n",[36,280,282],{"href":281},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","normalmente necesitan una restricción en Google Cloud",",\ny no rotación. Una era una clave secreta de Stripe, y esa app sacó una D.\nBase44 guarda sus propias credenciales en su servidor, así que una clave en tu\nbundle es una que tú o el builder añadisteis para una función: un mapa, una\netiqueta de analítica, un formulario de pago.\n",[36,285,287],{"href":286},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Saber de qué tipo es"," se lee\nen un minuto, y una secreta se rota donde se emitió antes de sacarla del código.",[10,290,291,294],{},[17,292,293],{},"Las reglas de permisos de tus tablas."," Base44 las llama data access rules, y\ndeciden quién puede leer y editar cada tipo de registro. Nadie desde fuera\npuede probarlas, nosotros incluidos, y ese es el único sitio donde un escaneo\nexterno tiene que dejar un hueco. El propio escaneo de seguridad de Base44 sí\nlas lee, y su documentación dice que está disponible en todos los planes, el\ngratuito incluido.",[10,296,297,300,301,304],{},[17,298,299],{},"Todo lo que conectaste tú."," La otra D del barrido era una app de Base44 con\nun proyecto de Supabase propio, y dentro una tabla nombrada como datos\npersonales que respondía a una petición sin sesión. Conecta tu propia base de\ndatos y las ",[36,302,303],{"href":263},"reglas por fila habituales"," aplican por\ncompleto, porque ese proyecto responde a internet directamente.",[207,306],{"alt":307,"caption":308,"src":309},"Un informe de escaneo dibujado como seis filas. Las primeras cuatro, cabeceras, el globo del CORS, un script con su map y una carga de datos, están dibujadas en tono tenue y cada una termina en un pequeño logo de Base44. Las dos últimas, una clave y una tabla de base de datos, están dibujadas en color de acento y cada una termina en una persona.","Seis líneas que un escaneo puede imprimir en una app de Base44. Las cuatro primeras las fija la plataforma para todas las apps que aloja. Las dos últimas son las que un dueño puede cambiar, y de ellas salieron las dos notas D del barrido.","\u002Fblog\u002Fbase44-source-maps\u002Fwho-owns-each-line-1600x760.png",[25,311,313],{"id":312},"qué-puedes-cambiar-desde-dentro-de-base44","Qué puedes cambiar desde dentro de Base44",[10,315,316],{},"Dos cabeceras, las reglas de tus tablas y tus claves. El resto se fija para\ntodas las apps de la plataforma.",[10,318,319,320,323,324,327,328,331,332,335,336,339,340,343],{},"La documentación de Base44 enumera lo que puedes activar (leída el 16 de\nseptiembre de 2026). En el panel de tu app, en Security y luego el icono de\najustes, puedes activar dos cabeceras de seguridad. ",[17,321,322],{},"Prevent Embedding"," pone\n",[202,325,326],{},"X-Frame-Options",", que impide que tu app se muestre dentro de la página de otro\nsitio. ",[17,329,330],{},"Restrict Browser Features"," pone ",[202,333,334],{},"Permissions-Policy",", que limita qué\npuede pedirle tu app al navegador, cámara y ubicación incluidas. Si hay gente\nque inicia sesión en tu app y puede hacer algo con consecuencias en un clic,\nactiva la primera. La misma página dice que ",[202,337,338],{},"Content-Security-Policy"," y\n",[202,341,342],{},"Strict-Transport-Security"," «are not configurable at the individual app\nlevel». Eso es la mayor parte del hallazgo de cabeceras, y está fuera de tus\nmanos.",[10,345,346],{},"El propio escaneo de Base44 cubre el interior: problemas de permisos de datos,\nsecretos expuestos, funciones de backend sin comprobación de sesión,\ndependencias y, a partir del plan Builder, vulnerabilidades en el código. Su\ndocumentación no menciona los source maps ni la cabecera CORS, lo cual es\njusto, porque ambos son de la plataforma. Un escaneo externo cubre lo que se le\nentrega al navegador de un visitante, y en una app de Base44 ahí es donde la\nlista es más corta.",[42,348,349,362],{},[45,350,351],{},[48,352,353,356,359],{},[51,354,355],{},"Qué dice el informe",[51,357,358],{},"Quién lo fija",[51,360,361],{},"Qué hacer",[70,363,364,375,385,396,409,419],{},[48,365,366,369,372],{},[75,367,368],{},"Faltan cabeceras de seguridad",[75,370,371],{},"Base44, con dos interruptores para ti",[75,373,374],{},"Activa Prevent Embedding si hay gente que inicia sesión. Deja el resto.",[48,376,377,380,382],{},[75,378,379],{},"API abierta a cualquier web",[75,381,77],{},[75,383,384],{},"Nada. Mira mejor qué responde detrás.",[48,386,387,390,393],{},[75,388,389],{},"Código fuente original publicado",[75,391,392],{},"El script de la insignia de Base44",[75,394,395],{},"Nada. El map contiene el código de Base44 para la insignia.",[48,397,398,401,406],{},[75,399,400],{},"Una dirección responde sin sesión",[75,402,403,404],{},"Base44, en ",[202,405,256],{},[75,407,408],{},"Lee qué devuelve. Los ajustes de consentimiento son públicos a propósito.",[48,410,411,413,416],{},[75,412,65],{},[75,414,415],{},"Tú",[75,417,418],{},"Rota una clave secreta en su origen. Restringe una clave de Google.",[48,420,421,424,427],{},[75,422,423],{},"Una tabla legible",[75,425,426],{},"Tú, si conectaste tu propia base de datos",[75,428,429],{},"Row Level Security en cada tabla que contenga personas.",[25,431,433],{"id":432},"qué-hacer-ahora-mismo","Qué hacer ahora mismo",[435,436,437],"key-takeaways",{},[438,439,440,444,451,454,460,463],"ul",{},[441,442,443],"li",{},"Lee las tres líneas de plataforma de tu informe como de Base44, y luego lee el resto.",[441,445,446,447,450],{},"Pulsa F12 en tu app en producción y abre la pestaña ",[17,448,449],{},"Sources",". Si no hay una carpeta con tus propios archivos, no hay map de tu código, diga lo que diga el informe.",[441,452,453],{},"Encuentra cada clave en la app y lee su prefijo. Una secreta se rota donde se emitió y después se quita del código, en ese orden.",[441,455,456,457,459],{},"Activa ",[17,458,322],{}," en Security si tus usuarios inician sesión.",[441,461,462],{},"Abre Data, elige una tabla, luego Permissions, y lee la regla de cada tabla que contenga personas.",[441,464,465],{},"Si conectaste tu propio proyecto de Supabase, activa Row Level Security en cada tabla y comprueba que de verdad filtra.",[10,467,468],{},"Publicar en Base44 es un clic en la barra superior, y nada entre ese clic e\ninternet vuelve a leer la app buscando una clave que se pegó para que una\nfunción funcionara. Un escaneo que hiciste el mes pasado describe la app del\nmes pasado.",[10,470,471,475],{},[36,472,474],{"href":473},"\u002Fpricing","Reeve Monitor"," está hecho para eso. Vuelve a ejecutar las nueve\ncomprobaciones cada hora en hasta tres apps, vigila la disponibilidad cada 60\nsegundos, te avisa cuando un resultado cambia en lugar de esperar a que mires,\ny envía un informe mensual. Cuesta $12 al mes a precio de lista, con siete días\ngratis antes de cobrarte; la página de precios a veces está por debajo de la\ncifra de aquí y nunca por encima. Monitor vigila y nada más, que para una app\nde Base44 es la mitad que encaja: Care, nuestro plan de copias de seguridad,\nsolo respalda proyectos de Supabase, y una app de Base44 guarda sus datos\ndentro de Base44 salvo que hayas conectado un proyecto propio.",[10,477,478,479,482,483,487],{},"La guía en lenguaje claro para esta plataforma es\n",[36,480,481],{"href":263},"¿Es segura tu app de Base44?",", y la\n",[36,484,486],{"href":485},"\u002Fchecklist","checklist de seguridad de 10 minutos"," cubre lo que merece la pena\nconfirmar en cualquier app recién lanzada, la haya construido lo que la haya\nconstruido.",{"title":489,"searchDepth":490,"depth":490,"links":491},"",3,[492,494,495,496,497,498],{"id":27,"depth":493,"text":28},2,{"id":181,"depth":493,"text":182},{"id":231,"depth":493,"text":232},{"id":268,"depth":493,"text":269},{"id":312,"depth":493,"text":313},{"id":432,"depth":493,"text":433},"Fundamentos de seguridad","\u002Fblog\u002Fbase44-source-maps\u002Fcover-1200x630.png","Una app de Base44 con la insignia de la plataforma en una esquina, leída desde fuera en un informe de tres líneas tenues y una en acento.","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.",false,"md",[506,509,512,515,518],{"q":507,"a":508},"Mi escaneo dice que mi app de Base44 publica su código fuente original. ¿Es cierto?","En las apps de Base44 que volvimos a comprobar en septiembre de 2026, no. El único source map que respondía pertenecía al script de la insignia de Base44, y contiene el código de Base44 para esa insignia. Tus propios archivos salieron comprimidos y sin map en todas las apps que abrimos. La misma línea en una app de otro builder suele significar lo que dice, y ahí sí merece la pena leerla.",{"q":510,"a":511},"¿Puedo desactivar el comodín CORS en una app de Base44?","No. La documentación de Base44 dice que la configuración de CORS por app no está disponible y que la plataforma la gestiona. Lo que tú decides es qué devuelven las direcciones de tu app a una petición sin sesión, y de todos modos ahí es donde la cabecera importaría. En las apps de Base44 que reabrimos, la única dirección que respondía sin sesión devolvía ajustes de consentimiento de cookies.",{"q":513,"a":514},"¿Base44 es menos seguro que Lovable?","Un escaneo no puede ordenar builders, y estos dos tienen formas distintas. Una app de Base44 saca más hallazgos, y casi todos son ajustes de la plataforma que no exponen nada tuyo. Una app de Lovable habla directamente con su base de datos de Supabase, así que el ajuste que más datos filtra, una tabla sin reglas por fila, está al alcance de un creador en Lovable y no de uno en Base44. Dos notas D entre 5.438 apps de Base44 frente a 407 entre 18.554 apps de Lovable es esa diferencia en cifras. No dice nada de tu app hasta que la escaneas.",{"q":516,"a":517},"¿Qué puedo cambiar desde dentro de Base44?","Dos cabeceras de seguridad (Prevent Embedding y Restrict Browser Features, en Security dentro del panel de tu app), las reglas de permisos de cada tabla, qué funciones de backend exigen un usuario con sesión y qué claves pegas en la app. CORS, Content-Security-Policy y Strict-Transport-Security los fija la plataforma para todas las apps, y la documentación de Base44 lo dice.",{"q":519,"a":520},"¿Un source map público expone mis claves de API?","Un map expone código, y una clave que está en el código ya estaba en el archivo comprimido que descarga cada visitante. En una app de Base44 el único map que encontramos pertenece a la insignia, así que la pregunta real es si hay alguna clave en tu bundle. Nuestro escaneo lee el bundle para eso por separado. En apps de Base44, las claves que encuentra son casi siempre claves de API de Google, que normalmente necesitan una restricción en Google Cloud, y no rotación.","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",[523,524,525,526,527,528,529],"seguridad base44","es seguro base44","base44 source maps","seguridad app base44","base44 cors","base44 vs lovable seguridad","base44 security",{},true,"\u002Fblog\u002Fbase44-source-maps","2026-09-17",{"title":5,"description":502},"blog\u002Fbase44-source-maps",[537,538,539],"La seguridad en Base44 la decide sobre todo la plataforma. Un escaneo de una app de Base44 saca los mismos tres hallazgos en casi todas: cabeceras que faltan, una cabecera CORS comodín y un source map publicado.","El 16 de septiembre de 2026 volvimos a leer qué contienen esos source maps. Todos los que respondían pertenecían al script de la insignia de Base44. El código del dueño salió sin map en todas las apps que abrimos.","Lo tuyo es corto: cualquier clave pegada en la app (encontrada en el 2 % de las apps de Base44), las reglas de permisos de tus tablas y todo lo que hayas conectado tú. Las dos notas D entre 5.438 apps salieron de esa lista.","SMz6rWqvaUxguR2dYKHGR-IdvRVdMw8mk2eMZ-O3JyI",[542,549,555,561,567,573,579,580,586,592,598,604,610,616,622,628,634,640,646,652,658,664,670,676,682,688,694,700,706,711,717,723,729,734,740,746,750,756,762,768,773,779],{"path":543,"title":544,"description":545,"published":546,"category":547,"image":548,"draft":503},"\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":550,"title":551,"description":552,"published":553,"category":499,"image":554,"draft":503},"\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":556,"title":557,"description":558,"published":559,"category":499,"image":560,"draft":503},"\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":562,"title":563,"description":564,"published":565,"category":499,"image":566,"draft":503},"\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":568,"title":569,"description":570,"published":571,"category":499,"image":572,"draft":503},"\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":574,"title":575,"description":576,"published":577,"category":499,"image":578,"draft":503},"\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":532,"title":5,"description":502,"published":533,"category":499,"image":521,"draft":503},{"path":581,"title":582,"description":583,"published":584,"category":499,"image":585,"draft":503},"\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":587,"title":588,"description":589,"published":590,"category":499,"image":591,"draft":503},"\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":593,"title":594,"description":595,"published":596,"category":547,"image":597,"draft":503},"\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":599,"title":600,"description":601,"published":602,"category":547,"image":603,"draft":503},"\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":605,"title":606,"description":607,"published":608,"category":547,"image":609,"draft":503},"\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":611,"title":612,"description":613,"published":614,"category":499,"image":615,"draft":503},"\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":617,"title":618,"description":619,"published":620,"category":499,"image":621,"draft":503},"\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":623,"title":624,"description":625,"published":626,"category":499,"image":627,"draft":503},"\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":629,"title":630,"description":631,"published":632,"category":499,"image":633,"draft":503},"\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":635,"title":636,"description":637,"published":638,"category":499,"image":639,"draft":503},"\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":641,"title":642,"description":643,"published":644,"category":499,"image":645,"draft":503},"\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":647,"title":648,"description":649,"published":650,"category":499,"image":651,"draft":503},"\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":653,"title":654,"description":655,"published":656,"category":499,"image":657,"draft":503},"\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":659,"title":660,"description":661,"published":662,"category":499,"image":663,"draft":503},"\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":665,"title":666,"description":667,"published":668,"category":499,"image":669,"draft":503},"\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":671,"title":672,"description":673,"published":674,"category":547,"image":675,"draft":503},"\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":677,"title":678,"description":679,"published":680,"category":499,"image":681,"draft":503},"\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":683,"title":684,"description":685,"published":686,"category":547,"image":687,"draft":503},"\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":689,"title":690,"description":691,"published":692,"category":499,"image":693,"draft":503},"\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":695,"title":696,"description":697,"published":698,"category":499,"image":699,"draft":503},"\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":701,"title":702,"description":703,"published":704,"category":499,"image":705,"draft":503},"\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":248,"title":707,"description":708,"published":709,"category":499,"image":710,"draft":503},"¿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":712,"title":713,"description":714,"published":715,"category":547,"image":716,"draft":503},"\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":718,"title":719,"description":720,"published":721,"category":547,"image":722,"draft":503},"\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":724,"title":725,"description":726,"published":727,"category":499,"image":728,"draft":503},"\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":281,"title":730,"description":731,"published":732,"category":499,"image":733,"draft":503},"¿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":735,"title":736,"description":737,"published":738,"category":547,"image":739,"draft":503},"\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":741,"title":742,"description":743,"published":744,"category":499,"image":745,"draft":503},"\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":195,"title":747,"description":748,"published":744,"category":499,"image":749,"draft":503},"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":751,"title":752,"description":753,"published":754,"category":499,"image":755,"draft":503},"\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":757,"title":758,"description":759,"published":760,"category":547,"image":761,"draft":503},"\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":763,"title":764,"description":765,"published":766,"category":499,"image":767,"draft":503},"\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":769,"title":770,"description":771,"published":766,"category":547,"image":772,"draft":503},"\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":774,"title":775,"description":776,"published":777,"category":547,"image":778,"draft":503},"\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":286,"title":780,"description":781,"published":777,"category":499,"image":782,"draft":503},"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",1790150954062]