[{"data":1,"prerenderedAt":321},["ShallowReactive",2],{"guide-base44-es":3},{"id":4,"title":5,"body":6,"cover":287,"coverAlt":288,"description":289,"extension":290,"faq":291,"keywords":304,"meta":310,"navigation":311,"path":312,"platform":67,"published":313,"seo":314,"stem":315,"tldr":316,"updated":313,"__hash__":320},"platform_es\u002Fis-your-base44-app-safe.md","¿Es segura tu app de Base44?",{"type":7,"value":8,"toc":276},"minimark",[9,13,16,24,29,32,43,49,52,61,64,68,72,75,80,104,117,120,124,127,134,137,145,149,152,159,162,170,174,177,182,185,197,205,209,215,221,227,233,243,268],[10,11,12],"p",{},"Base44 hace algo que los demás creadores no hacen, y conviene saberlo antes de\nponerse a buscar problemas: tus datos nunca responden directamente a internet.",[10,14,15],{},"Tu app le pide algo a Base44, Base44 se lo pide a la base de datos, y la\nrespuesta vuelve por el mismo camino. No hay una dirección que un desconocido\npueda teclear. En la mayoría de las apps hechas deprisa, la mayor causa de datos\nfiltrados es una tabla que puede leer cualquiera que tenga la dirección del\nproyecto, y en Base44 ese fallo ni siquiera está a tu alcance.",[10,17,18,19,23],{},"Y esta es la parte que guía tras guía cuenta mal: ",[20,21,22],"strong",{},"eso no hace que tu app sea\nsegura, la hace segura en un aspecto concreto."," El riesgo se traslada, y hacia\ndónde se traslada es tan predecible que podemos contártelo ya, antes de que\nanalices nada.",[25,26,28],"h2",{"id":27},"lo-que-base44-mantiene-fuera-de-internet-por-ti","Lo que Base44 mantiene fuera de internet por ti",[10,30,31],{},"El almacén, por seguir con la comparación evidente.",[10,33,34,35,38,39,42],{},"Piensa en tu app como una tienda. Todo lo que descarga el navegador de un\nvisitante es el ",[20,36,37],{},"escaparate",", y se entrega entero a cualquiera que cargue la\npágina: un navegador no puede mostrar algo que no le enviaron. Detrás está el\n",[20,40,41],{},"almacén",", tus datos. En la mayoría de los creadores el almacén es otro\nedificio con su propia dirección en la misma calle, y que entren desconocidos\ndepende de un ajuste que quizá nunca hayas visto. En Base44 no hay puerta a la\ncalle.",[44,45],"diagram",{"alt":46,"caption":47,"src":48},"Una app de Base44 con una flecha hacia un panel de Base44, que a su vez apunta con otra flecha a un cilindro de base de datos. Debajo, la ruta de un visitante anónimo hacia esa misma base de datos está dibujada como una línea discontinua con una cruz roja.","La línea discontinua es la ruta que tienen los demás creadores. Está dibujada aquí para que veas lo que falta a propósito.","\u002Fguides\u002Fbase44\u002Fwhere-your-data-sits-1600x820.png",[10,50,51],{},"En la práctica eso significa que no hay nada que pegar en un navegador. En una\napp con Supabase detrás, cualquiera puede sacar la dirección del proyecto de tu\npaquete, añadir el nombre de una tabla y ver qué vuelve. Haz lo mismo con una\napp de Base44 y la única dirección que encuentras es la tuya, en tu propio\ndominio, respondiendo lo que tu app fue escrita para responder.",[10,53,54,55,60],{},"Se nota en las notas. Entre las apps de Base44 de\n",[56,57,59],"a",{"href":58},"\u002Fresearch\u002Fvibe-coded-app-security-2026","nuestro análisis de apps publicadas",",\ncasi todas sacan una A o una B, y los fallos que arrastran a otros creadores\nhasta una D apenas aparecen.",[10,62,63],{},"También tiene una consecuencia honesta: desde fuera nadie puede verificarlo,\nnosotros incluidos. Una revisión desde internet solo puede probar puertas que\nexisten. Aquí no hay ninguna, así que no hay nada que informar, y un escáner que\nimprimiese \"base de datos: segura\" con esa base estaría inventándose un\nresultado.",[65,66],"guide-cta",{"platform":67},"base44",[25,69,71],{"id":70},"es-un-problema-que-haya-una-clave-en-tu-app-de-base44","¿Es un problema que haya una clave en tu app de Base44?",[10,73,74],{},"Normalmente no, y los dos tipos se parecen muchísimo.",[44,76],{"alt":77,"caption":78,"src":79},"Dos tarjetas una al lado de la otra. La clave publicable, con una marca verde, está etiquetada como correcta en el navegador y muestra sb_publishable_, anon y pk_live. La clave secreta, con una cruz roja, está etiquetada como solo servidor y muestra sb_secret_, service_role y sk_live.","Las dos se llaman claves de API. Solo una estaba pensada para poder leerse.","\u002Fguides\u002Ftwo-kinds-of-key-1600x760.png",[10,81,82,83,86,87,90,91,95,96,99,100,103],{},"Una clave ",[20,84,85],{},"publicable"," nombra un proyecto y no hace nada más. Está pensada\npara leerse, y encontrarla no es un hallazgo. Una clave ",[20,88,89],{},"secreta",", del tipo\n",[92,93,94],"code",{},"sb_secret_…",", ",[92,97,98],{},"service_role"," o ",[92,101,102],{},"sk_live_…",", se salta todas las reglas que hayas\nescrito y puede leerlo y cambiarlo todo.",[10,105,106,107,111,112,116],{},"Base44 guarda sus propias credenciales en el servidor, así que una clave en tu\napp normalmente no es de Base44. Viene de algo que conectaste tú: una clave de\nmapas, de analítica o de pagos pegada para que funcionara una función. La que\nmás encontramos en apps de Base44 es una clave de la API de Google, que conviene\n",[56,108,110],{"href":109},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","entender en lugar de asustarse",",\nporque una sin restricciones la pueden gastar desconocidos.\n",[56,113,115],{"href":114},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Leer qué clave tienes"," lleva un\nminuto.",[10,118,119],{},"Si de verdad encuentras un secreto, el orden importa. Cámbiala donde se emitió,\nen Google Cloud o en Stripe o de donde viniera, y sácala de tu código después.\nBorrar la línea primero no cierra nada: el valor antiguo ya está en cada copia\nen caché de tu sitio y en lo que un rastreador se llevara la semana pasada.",[25,121,123],{"id":122},"el-ajuste-que-está-mal-en-casi-todas-las-apps-de-base44","El ajuste que está mal en casi todas las apps de Base44",[10,125,126],{},"No es una clave, y no es la base de datos. Es con quién está dispuesta a hablar\ntu API.",[10,128,129,130,133],{},"Un navegador normalmente impide que una web lea los datos de otra. Esa regla es\nla razón de que una página que abres no pueda llamar a tu banco y poner tu saldo\nen pantalla sin que te enteres. Una cabecera de respuesta llamada CORS la\nlevanta, y puesta en ",[92,131,132],{},"*"," la levanta para todo el mundo: una web de la que nunca\nhas oído hablar puede llamar a la API de tu app desde el navegador de tu\nvisitante y leer lo que vuelve.",[10,135,136],{},"En las apps de Base44 que hemos analizado este es el hallazgo más común con\ndiferencia. También es con el que más se discute, y la discusión es legítima,\nasí que aquí va la versión honesta. Un comodín delante de una dirección que\nexige inicio de sesión es un hallazgo flojo, porque la otra web sigue sin tener\ncredenciales que enviar. Un comodín delante de una dirección que responde a\ncualquiera es lo serio, y alrededor de la mitad de las apps de Base44 que\nanalizamos tienen al menos una dirección que devuelve datos a una petición\nsimple sin nadie identificado. Son dos problemas distintos bajo una sola\netiqueta, y el segundo es el que hay que ir a buscar.",[10,138,139,140,144],{},"Ninguno de los dos es un error tuyo. Un comodín es lo que publica una\nherramienta de compilación cuando nadie le ha dicho otra cosa, normalmente para\nque el dominio de vista previa y el dominio en vivo funcionen los dos mientras\nconstruyes. El ",[56,141,143],{"href":142},"\u002Fblog\u002Fcors-wildcard-security-risk","texto breve"," tiene el arreglo,\nque consiste en poner tu propio dominio en lugar del asterisco.",[25,146,148],{"id":147},"tu-código-original-publicado-junto-a-la-app","Tu código original, publicado junto a la app",[10,150,151],{},"El segundo hallazgo más común, y el que puedes comprobar sin ninguna herramienta.",[10,153,154,155,158],{},"Un ",[20,156,157],{},"source map"," es un archivo que convierte el JavaScript comprimido que\nejecuta el navegador en lo que tú escribiste, con los nombres de archivo\noriginales, los comentarios y la estructura de carpetas intactos. Las\nherramientas de compilación los generan para que un error en producción apunte a\nuna línea de verdad y no a la columna 4.812 de un único archivo enorme. Esa\nparte es de verdad útil. Publicarlos junto a la app es la parte que te cuesta\nalgo.",[10,160,161],{},"Alrededor de tres de cada cinco apps de Base44 que analizamos publican los\nsuyos. No se filtra ningún dato por ello, y tu app no se comporta distinto en\nnada, que es justo por lo que pasa desapercibido durante meses. Lo que cambia es\nel esfuerzo de todo lo demás: sacar un endpoint de un paquete minificado es\ntrabajo lento y quisquilloso, y leer tu propio código no es trabajo en absoluto.\nCualquier otro hallazgo de esta página sale más barato de encontrar en cuanto tu\ncódigo es legible.",[10,163,164,165,169],{},"Comprobarlo lleva menos de un minuto. Abre tu app en vivo, pulsa F12 y mira el\npanel Sources. Si el árbol de archivos de ahí se parece a tu proyecto, con los\nnombres que les pusiste, los maps salieron con la publicación, y el\n",[56,166,168],{"href":167},"\u002Fblog\u002Fsource-maps-exposed-in-production","texto largo"," explica qué cambiar.",[25,171,173],{"id":172},"si-enchufaste-tu-propia-base-de-datos","Si enchufaste tu propia base de datos",[10,175,176],{},"Entonces la ventaja del principio de esta página no vale para esa parte, y\nvuelven las reglas de siempre.",[44,178],{"alt":179,"caption":180,"src":181},"Una app hecha con Base44 y un visitante anónimo dibujados con flechas hacia el mismo cilindro de base de datos. Debajo, dos resultados: con RLS desactivada se responde a todos, con RLS activada solo a tu app.","Esta imagen trata de una base de datos que enchufaste tú. Los datos propios de Base44 no tienen flecha desde el desconocido.","\u002Fguides\u002Fbase44\u002Fwho-the-database-answers-1600x820.png",[10,183,184],{},"Aproximadamente una cuarta parte de las apps de Base44 que analizamos nombra un\nproyecto de Supabase propio. Ese proyecto responde a internet directamente,\nigual que el de cualquier otro creador, así que Row Level Security ahora es cosa\ntuya: un interruptor por tabla que decide fila a fila quién puede leer qué.",[10,186,187,188,191,192,196],{},"Dos cosas deciden si la tienes. Supabase la activa ",[20,189,190],{},"por defecto en las tablas\ncreadas en el Table Editor del panel",", y no en las creadas ejecutando SQL, que\nes como las crean la mayoría de las configuraciones generadas. Y el interruptor\nes solo la mitad, porque una política que permite a todo el mundo deja la tabla\n",[56,193,195],{"href":194},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","abierta mientras el panel la da por segura",".",[10,198,199,200,204],{},"Con el almacenamiento pasa lo mismo y se olvida fácil, porque vive en otra parte\ndel panel, lejos de las reglas de las tablas. Un bucket marcado como público lo\npuede listar y descargar cualquiera que sepa que está ahí, enlace o no tu app\nalgún archivo suyo, y los\n",[56,201,203],{"href":202},"\u002Fblog\u002Fsupabase-storage-bucket-public","ajustes que lo deciden"," merecen una\nlectura tranquila.",[25,206,208],{"id":207},"cómo-revisar-tu-app-de-base44-en-unos-diez-minutos","Cómo revisar tu app de Base44 en unos diez minutos",[10,210,211,214],{},[20,212,213],{},"Pregunta qué le dice tu API a otros sitios."," Es lo que más probablemente esté\nmal y lo que nadie mira, porque en tu app no se comporta nada raro cuando está\ndemasiado abierto.",[10,216,217,220],{},[20,218,219],{},"Abre tu app en vivo con F12 y lee el panel Sources."," Si tus propios archivos\naparecen ahí con sus propios nombres, cualquier otra persona puede listarlos\nigual.",[10,222,223,226],{},[20,224,225],{},"Lee cualquier clave que haya en la app."," Con cada una, pregúntate si la\npondrías en tu página de inicio. Si la respuesta es no, su sitio es un servidor,\ny hay que cambiarla en el origen antes de sacarla del código.",[10,228,229,232],{},[20,230,231],{},"Abre Authentication → Policies, si conectaste tu propio proyecto de Supabase.","\nCualquier tabla que aparezca con Row Level Security desactivada responde a quien\ntenga la dirección del proyecto, y esa dirección está en tu app.",[10,234,235,238,239,196],{},[20,236,237],{},"Y luego mira desde fuera."," Los pasos de arriba te dicen qué está configurado.\nQué puede alcanzar de verdad un desconocido es otra pregunta, y es la que\nresponde nuestro análisis gratuito. Lee tu sitio en vivo como un visitante y te\nda una nota en unos 20 segundos, sin cuenta: ",[56,240,242],{"href":241},"\u002F#scan","analiza tu app",[244,245,246],"key-takeaways",{},[247,248,249,253,256,259,262,265],"ul",{},[250,251,252],"li",{},"Base44 mantiene tu base de datos fuera de internet. La mayor causa de datos filtrados en apps hechas deprisa no está a tu alcance.",[250,254,255],{},"Desde fuera nadie puede verificarlo, nosotros incluidos. Sin puerta no hay resultado, y no haber resultado no es un visto verde.",[250,257,258],{},"El riesgo se traslada al navegador: una API que responde a cualquier web y tu código fuente publicado junto a la app.",[250,260,261],{},"Un comodín delante de una dirección que no pide inicio de sesión es la versión que importa, y alrededor de la mitad de estas apps tienen una.",[250,263,264],{},"Una clave en tu paquete suele venir de un servicio que conectaste tú. Cámbiala en el origen y luego bórrala del código.",[250,266,267],{},"Si enchufas tu propio proyecto de Supabase, las reglas habituales de Row Level Security y de almacenamiento se le aplican por completo.",[10,269,270,271,275],{},"Empieza por las dos que casi siempre merecen la pena: qué le dice tu API a otras\nwebs y si tu código original salió con la app. Después, la\n",[56,272,274],{"href":273},"\u002Fchecklist","lista de seguridad de 10 minutos"," cubre el resto.",{"title":277,"searchDepth":278,"depth":278,"links":279},"",3,[280,282,283,284,285,286],{"id":27,"depth":281,"text":28},2,{"id":70,"depth":281,"text":71},{"id":122,"depth":281,"text":123},{"id":147,"depth":281,"text":148},{"id":172,"depth":281,"text":173},{"id":207,"depth":281,"text":208},"\u002Fguides\u002Fbase44\u002Fis-your-base44-app-safe-es-1200x630.png","Tarjeta de revisión de seguridad de Reeve para apps de Base44, con el logo de Base44 sobre un recuadro blanco.","Base44 mantiene tu base de datos fuera de internet, lo que elimina el mayor riesgo de las apps hechas deprisa. Lo que queda es una lista corta y casi siempre la misma.","md",[292,295,298,301],{"q":293,"a":294},"Si mi base de datos no es accesible, ¿queda algo de lo que preocuparse?","Sí, pero una lista más corta que la de casi todo el mundo. Tu app sigue ejecutándose en un navegador, y todo lo que el navegador recibe es público: el código, cualquier clave incrustada en él y las direcciones a las que llama. Lo que merece la pena revisar son dos cosas: si esas direcciones responden a peticiones de otras webs, y si salió con la publicación una copia legible de tu código fuente.",{"q":296,"a":297},"Si nadie puede revisarlo desde fuera, ¿cómo sé que mis datos están bien?","Desde dentro, que es el único sitio donde existe esa respuesta. Como las peticiones pasan por Base44 en lugar de ir a una dirección pública, todo lo que decide quién puede leer qué vive en tu app y en la plataforma, donde un desconocido no puede hurgar. Así que las preguntas útiles son quién puede registrarse, qué ve una persona registrada y si alguna pantalla se construyó dando por hecho que nadie iba a mirar. Una revisión externa no responde a ninguna de esas. Responde a la otra mitad: qué alcanza alguien sin registrarse siquiera.",{"q":299,"a":300},"Mi análisis dice que mi API responde a cualquier web. ¿Lo configuré yo?","Casi con seguridad no a propósito. Un comodín es lo que publica una herramienta de compilación cuando nadie le ha dicho otra cosa, normalmente para que la dirección de vista previa y la dirección en vivo funcionen las dos mientras construyes, y sobrevive hasta producción porque en tu app no se rompe nada cuando está demasiado abierto. Lo que decide cuánto importa es la dirección que hay detrás: si pide inicio de sesión, es un hallazgo flojo. Si responde a cualquiera, es la versión que conviene arreglar esta semana.",{"q":302,"a":303},"Conecté mi propio proyecto de Supabase a mi app de Base44. ¿Eso cambia algo?","Cambia lo más importante. Tu propio proyecto responde directamente a internet, así que el ajuste de Row Level Security por tabla ahora es cosa tuya, y viene desactivado en cualquier tabla creada ejecutando SQL. Ese es el único camino por el que el clásico problema de la base de datos abierta llega a una app de Base44, y merece diez minutos de tu tiempo.",[305,306,307,308,309],"es base44 seguro","seguridad base44","base44 cors","clave api base44 expuesta","source maps base44",{},true,"\u002Fis-your-base44-app-safe","2026-08-30",{"title":5,"description":289},"is-your-base44-app-safe",[317,318,319],"Base44 no expone tu base de datos a internet. El fallo que filtra la mayoría de las apps hechas deprisa no está a tu alcance, y eso es una ventaja real.","El riesgo se traslada a lo que ve el navegador: una API que responde a cualquier web y tu código original publicado junto a la app. Esos dos aparecen en casi todas las apps de Base44 que analizamos.","Nadie puede revisar una base de datos de Base44 desde fuera, nosotros incluidos. Si conectaste tu propio proyecto de Supabase, esa parte sí se puede revisar y merece la pena.","qnhU_P16_pCvb2IgDcoYC3H5vqyRKURHNryyrDtAYDU",1788681839400]