[{"data":1,"prerenderedAt":989},["ShallowReactive",2],{"blog-es-does-supabase-encrypt-my-data":3,"blog-index-es":634},{"id":4,"title":5,"body":6,"category":589,"cover":590,"coverAlt":591,"description":592,"draft":593,"extension":594,"faq":595,"image":611,"keywords":612,"meta":623,"navigation":624,"ogTitle":26,"path":625,"published":626,"seo":627,"stem":628,"tldr":629,"updated":626,"__hash__":633},"blog_es\u002Fblog\u002Fdoes-supabase-encrypt-my-data.md","¿Supabase cifra mis datos? Sí. Esto es lo que detiene",{"type":7,"value":8,"toc":572},"minimark",[9,13,16,19,22,27,38,45,61,79,145,149,152,155,158,161,167,171,174,177,194,198,201,210,216,225,237,241,244,247,251,260,263,267,270,273,281,300,303,307,310,319,328,332,335,449,452,456,459,470,482,487,490,494,499,535,542,546,566],[10,11,12],"p",{},"Un cliente te escribe para preguntar si sus datos están cifrados. O un cliente\nmás grande te manda un cuestionario de seguridad en una hoja de cálculo, y ahí\nestán las filas que tiene todo cuestionario: cifrado en reposo, cifrado en\ntránsito, el informe SOC 2 de tu proveedor de alojamiento. Tu app funciona sobre\nSupabase porque Lovable o Bolt lo configuraron así, y hasta hoy nadie necesitaba\nque supieras qué significa nada de eso.",[10,14,15],{},"Entonces, ¿Supabase cifra tus datos? Sí. Todos, en todos los planes, y los\ncertificados detrás de esa afirmación son reales.",[10,17,18],{},"La mayoría de las respuestas se equivoca al quedarse ahí, como si el cifrado\ndecidiera quién puede leer tus datos. Decide algo más estrecho. Piensa en\nSupabase como un banco. El cifrado en reposo es la cámara acorazada, el cifrado\nen tránsito es el furgón blindado, y SOC 2 es el inspector que comprueba que los\ndos funcionan como dice el banco. Cada uno tiene que ver con alguien que nunca\ndebió entrar. La regla de la ventanilla, la que dice de quién puede pedir el\nextracto un cliente, es otra cosa, y se escribe en tu proyecto.",[10,20,21],{},"Cada cifra de abajo se leyó en las páginas y la documentación de Supabase el 29\nde septiembre de 2026.",[23,24,26],"h2",{"id":25},"supabase-cifra-mis-datos","¿Supabase cifra mis datos?",[10,28,29,30,37],{},"Sí. La ",[31,32,36],"a",{"href":33,"rel":34},"https:\u002F\u002Fsupabase.com\u002Fsecurity",[35],"nofollow","página de seguridad"," de Supabase dice\nque todos los datos de sus clientes están cifrados en reposo con AES-256 y en\ntránsito con TLS, y no tienes que activar nada.",[10,39,40,44],{},[41,42,43],"strong",{},"En reposo"," quiere decir en los discos. Tu base de datos se escribe en el\nalmacenamiento de forma cifrada, así que una copia del disco sacada de las\nmáquinas de Supabase es ilegible por sí sola.",[10,46,47,50,51,56,57,60],{},[41,48,49],{},"En tránsito"," quiere decir en el camino entre tu visitante y Supabase. Tu app\nhabla con Supabase a través de sus API web, para datos, inicios de sesión y\narchivos, y la\n",[31,52,55],{"href":53,"rel":54},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fssl-enforcement",[35],"guía de obligación de SSL","\nde Supabase dice que cada una de esas API rechaza una conexión sin cifrar. La\nexcepción es una conexión directa a la base de datos Postgres que hay debajo,\nla que podría abrir una herramienta de copias de seguridad o un servidor tuyo.\nEsas aceptan una conexión sin cifrar hasta que activas\n",[41,58,59],{},"Enforce SSL on incoming connections"," en Database Settings. Los navegadores de\ntus visitantes nunca abren una.",[10,62,63,66,67,72,73,78],{},[41,64,65],{},"El cifrado de columnas"," es la única capa que queda apagada. Mantiene un valor\nconcreto, un número de teléfono por ejemplo, ilegible incluso dentro de la base\nde datos. Supabase documentaba una forma de hacerlo, y su\n",[31,68,71],{"href":69,"rel":70},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fdatabase\u002Fextensions\u002Fpgsodium",[35],"página de pgsodium","\nahora desaconseja esa función, por su complejidad operativa y el riesgo de\nconfigurarla mal, y añade que el cifrado en reposo probablemente basta para SOC\n2 y HIPAA. Para secretos como la clave API de un servicio externo existe\n",[31,74,77],{"href":75,"rel":76},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fdatabase\u002Fvault",[35],"Vault",", que los guarda\ncifrados y los devuelve a través de una vista.",[80,81,82,98],"table",{},[83,84,85],"thead",{},[86,87,88,92,95],"tr",{},[89,90,91],"th",{},"Capa",[89,93,94],{},"Activa por defecto",[89,96,97],{},"Contra qué protege",[99,100,101,113,124,135],"tbody",{},[86,102,103,107,110],{},[104,105,106],"td",{},"En reposo, AES-256",[104,108,109],{},"Sí, en todos los planes",[104,111,112],{},"Una copia del disco leída sin pasar por Supabase",[86,114,115,118,121],{},[104,116,117],{},"En tránsito, TLS",[104,119,120],{},"Sí en cada API. En Postgres directo, cuando activas la obligación",[104,122,123],{},"Alguien que lee el tráfico entre una app y Supabase",[86,125,126,129,132],{},[104,127,128],{},"Cifrado de columnas",[104,130,131],{},"No, y Supabase desaconseja la función que ofrecía",[104,133,134],{},"Un valor concreto leído por quien puede consultar su tabla",[86,136,137,139,142],{},[104,138,77],{},[104,140,141],{},"Para cada secreto que guardas en él",[104,143,144],{},"Un secreto legible en el disco o en un archivo de copia de seguridad",[23,146,148],{"id":147},"de-qué-protege-el-cifrado-de-supabase","¿De qué protege el cifrado de Supabase?",[10,150,151],{},"De cualquiera que llegue a tus datos sin pedírselos a la base de datos. Quien se\nlleva un disco, copia un archivo de copia de seguridad o escucha el tráfico\nentre un navegador y Supabase obtiene bytes revueltos y nada más.",[10,153,154],{},"Una petición que la base de datos decide responder es otra cosa. El cifrado en\nreposo trabaja por debajo de Postgres, así que la base de datos lee sus propios\narchivos en claro, para cada consulta que atiende. Qué consultas atiende lo\nfijan los permisos de cada tabla. En Supabase eso es la Row Level Security, la\nregla que dice qué filas puede leer cada visitante, y cada tabla necesita\ntenerla activada con una regla escrita para ella.",[10,156,157],{},"Esa es la ventanilla del banco. La cámara acorazada se abre para el cajero cada\nvez, porque el cajero trabaja para el banco. Si nadie dejó escrito de quién\npuede ver los extractos un cliente, el cajero entrega lo que le pidan, y el\nfurgón blindado lo lleva, sellado todo el camino, a quien lo pidió.",[10,159,160],{},"La documentación de Supabase dice lo mismo de Vault, que sí cifra valores\ndentro de la base de datos: \"cualquiera que tenga acceso a la vista tiene\nacceso a los secretos descifrados.\"",[162,163],"diagram",{"alt":164,"caption":165,"src":166},"Tres caminos que salen de la misma base de datos con candado. Un disco que se llevan y un cable con candado solo entregan bloques revueltos a una lupa. Un navegador que envía una petición con la clave anon recibe las filas por un canal con candado, y llegan legibles.","El cifrado detiene los dos primeros caminos. El tercero es una pregunta que la base de datos responde, y para responderla descifra.","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fwhat-encryption-stops-1600x720.png",[23,168,170],{"id":169},"el-cifrado-impide-que-un-desconocido-lea-mis-tablas","¿El cifrado impide que un desconocido lea mis tablas?",[10,172,173],{},"No, y medimos con qué frecuencia importa. En agosto de 2026 escaneamos 30.998\napps publicadas hechas con Lovable, Base44, Replit, v0 y Bolt. En 3.680 de ellas\npudimos completar la comprobación que le pregunta a una base de datos de\nSupabase, sin iniciar sesión, si una tabla va a entregar sus filas. En 2.096, el\n57 %, al menos una tabla lo hacía, y 394 de ellas tenían una tabla abierta con\nnombre de personas: users, profiles, customers, orders.",[10,175,176],{},"Cada una de esas bases de datos estuvo cifrada en reposo todo el tiempo, según\nla propia descripción de la plataforma, y cualquier desconocido que preguntara\nhabría recibido las filas por TLS. Nada del cifrado falló, y no tuvo ningún\npapel en decidir quién recibía una respuesta.",[10,178,179,180,184,185,188,189,193],{},"La petición en sí es corriente. Es la que hace tu propia app para enseñarle sus\npedidos a un cliente con sesión iniciada, enviada sin la sesión: la clave\npública que debe estar en tu página, y un ",[181,182,183],"code",{},"GET"," a ",[181,186,187],{},"\u002Frest\u002Fv1\u002F"," con el nombre de\nuna tabla al final. Nuestro escaneo leyó cuántas filas devolvería cada tabla y\nse detuvo ahí, sin descargar ninguna.\n",[31,190,192],{"href":191},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","La medición completa"," explica de\nqué es una parte ese 57 % y cuánto no pudimos ver.",[23,195,197],{"id":196},"supabase-cumple-con-soc-2","¿Supabase cumple con SOC 2?",[10,199,200],{},"Sí. Supabase tiene un informe SOC 2 Type 2 de un auditor independiente,\nrenovado cada año.",[10,202,203,204,209],{},"Un informe SOC 2 es el relato de un auditor sobre si los controles de seguridad\nde una empresa funcionaron como la empresa dice. Type 2 significa que se\nprobaron durante todo un periodo, y el de Supabase va del 1 de marzo al 28 de\nfebrero. Cubre seguridad, disponibilidad, integridad del procesamiento,\nconfidencialidad y privacidad, en la base de datos, Storage, Auth, Realtime,\nlas Edge Functions y la Data API, y la\n",[31,205,208],{"href":206,"rel":207},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fsecurity\u002Fsoc-2-compliance",[35],"página de SOC 2"," de\nSupabase marca dónde termina:",[211,212,213],"blockquote",{},[10,214,215],{},"El cumplimiento de SOC 2 de Supabase no se transfiere a entornos fuera del\nproducto de Supabase ni fuera del control de Supabase.",[10,217,218,219,224],{},"En el banco, es el informe del inspector sobre la cámara y los furgones. Las\nreglas de tus tablas quedan fuera, porque las escribes tú: el\n",[31,220,223],{"href":221,"rel":222},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fdeployment\u002Fshared-responsibility-model",[35],"modelo de responsabilidad compartida","\nde Supabase incluye la gestión de accesos y la aplicación de controles de\nseguridad entre las cosas de las que el cliente siempre es responsable.",[10,226,227,228,231,232,236],{},"De ahí se siguen dos cosas más. Si un cliente necesita que ",[41,229,230],{},"tu"," empresa cumpla\ncon SOC 2, la página de SOC 2 de Supabase dice que un cliente en esa situación\ntiene que implantar los controles y pasar su propia auditoría. Y si Supabase es\nuna plataforma sólida sobre la que construir es\n",[31,233,235],{"href":234},"\u002Fblog\u002Fis-supabase-secure","una pregunta aparte, con su propio artículo",".",[23,238,240],{"id":239},"cómo-consigo-el-informe-soc-2-de-supabase","¿Cómo consigo el informe SOC 2 de Supabase?",[10,242,243],{},"Desde el panel de tu organización, en el plan Team o superior. Está en Legal\nDocuments, junto al certificado ISO 27001 y al cuestionario de seguridad\nestándar de Supabase, y una organización en Free o Pro encuentra ahí un botón\npara mejorar de plan en su lugar.",[10,245,246],{},"Team empieza en $599 al mes, cuando Pro empieza en $25, así que conviene saber\nqué compra la diferencia. La documentación de Supabase dice que todos los\nproyectos se rigen por el mismo conjunto de controles de cumplimiento, así que\nun proyecto en Pro funciona sobre la misma plataforma auditada. Team añade los\ndocumentos, además del inicio de sesión único para el panel, copias de\nseguridad diarias guardadas 14 días donde Pro las guarda 7, y el acceso a HIPAA.\nSi un cliente pide el informe en sí, pregúntale si le basta la página pública de\nseguridad de Supabase antes de cambiar de plan por un PDF.",[23,248,250],{"id":249},"supabase-tiene-la-certificación-iso-27001","¿Supabase tiene la certificación ISO 27001?",[10,252,253,254,259],{},"Sí, según ISO\u002FIEC 27001:2022, algo que Supabase\n",[31,255,258],{"href":256,"rel":257},"https:\u002F\u002Fsupabase.com\u002Fblog\u002Fsupabase-is-now-iso-27001-certified",[35],"anunció"," el 22\nde abril de 2026.",[10,261,262],{},"ISO 27001 certifica un sistema de gestión: las políticas, las evaluaciones de\nriesgo y los procesos con los que una empresa protege la información que\nguarda. Un auditor acreditado emite el certificado por tres años y vuelve cada\naño entre medias para comprobar que el sistema sigue funcionando. En el banco,\nes el inspector que revisa cómo se deciden y se mantienen al día los\nprocedimientos de seguridad. El anuncio de Supabase describe SOC 2 como\nampliamente aceptado en Norteamérica e ISO 27001 como ampliamente aceptado en\nEuropa, Asia y el sector público. El certificado está en la misma sección Legal\nDocuments, en los mismos planes.",[23,264,266],{"id":265},"supabase-cumple-con-hipaa","¿Supabase cumple con HIPAA?",[10,268,269],{},"Puede cumplir para tu proyecto, una vez que firmas un Business Associate\nAgreement con Supabase y pagas su add-on de HIPAA. No es automático, y la página\nde SOC 2 de Supabase dice que SOC 2 no lo sustituye.",[10,271,272],{},"Un Business Associate Agreement, o BAA, es el contrato escrito que la ley\nsanitaria de Estados Unidos exige antes de que una empresa pueda tratar\ninformación de salud protegida en tu nombre. Supabase firma uno desde el plan\nTeam. El add-on no tiene precio publicado: envías una solicitud, Supabase\nresponde con el precio y el proceso, y una organización en Free o Pro que la\nsolicite igualmente tiene que pasar a Team cuando se apruebe.",[10,274,275,276,280],{},"La firma es donde empieza tu parte. El\n",[31,277,223],{"href":278,"rel":279},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fdeployment\u002Fshared-responsibility-model#managing-healthcare-data",[35],"\nde Supabase enumera lo que tiene que hacer un cliente de HIPAA, y estos son los\npuntos que el dueño de una app tiene menos probabilidades de conocer:",[282,283,284,288,291,294,297],"ul",{},[285,286,287],"li",{},"Marcar el proyecto como proyecto HIPAA, y actuar sobre lo que el Security\nAdvisor señale de él.",[285,289,290],{},"Activar el inicio de sesión en dos pasos en todas las cuentas de la\norganización de Supabase.",[285,292,293],{},"Activar la recuperación a un punto en el tiempo, que necesita al menos el\nadd-on de cómputo Small.",[285,295,296],{},"Activar la obligación de SSL y las restricciones de red.",[285,298,299],{},"Mantener los datos de salud fuera de los buckets de almacenamiento públicos.",[10,301,302],{},"El cifrado en reposo y en tránsito también está en esa lista, y es el único\npunto que Supabase ya ha hecho.",[23,304,306],{"id":305},"supabase-cumple-con-el-rgpd","¿Supabase cumple con el RGPD?",[10,308,309],{},"Supabase da soporte a apps que cumplen el RGPD y aporta las dos piezas que solo\nSupabase puede aportar. Que tu app cumpla depende de lo que haga con los datos\nde las personas.",[10,311,312,313,318],{},"La primera pieza es la ubicación. Eliges una región al crear un proyecto, y una\nregión concreta de la UE mantiene ahí tu base de datos, Auth y Storage. Elige la\nregión por su nombre, porque la opción general Europa de Supabase también\nincluye Londres y Zúrich. La segunda es el\n",[31,314,317],{"href":315,"rel":316},"https:\u002F\u002Fsupabase.com\u002Flegal\u002Fdpa",[35],"Data Processing Addendum",", el contrato de\nencargo de tratamiento que el RGPD exige entre tú y una empresa que trata datos\npersonales por ti. El de Supabase forma parte de sus condiciones de servicio,\nasí que cada organización ya tiene uno.",[10,320,321,322,327],{},"El resto le corresponde a tu app: por qué recoges cada campo, cómo dan su\nconsentimiento las personas, quién puede leerlo y cómo lo borras cuando te lo\npiden. La ",[31,323,326],{"href":324,"rel":325},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fsecurity\u002Fgdpr-compliance",[35],"página del RGPD","\nde Supabase dice claramente que elegir una región no hace por sí solo que una\naplicación cumpla. Lo que tu app debe según la ley es una pregunta para un\nabogado.",[23,329,331],{"id":330},"cómo-respondo-al-cuestionario-de-seguridad-de-un-cliente","¿Cómo respondo al cuestionario de seguridad de un cliente?",[10,333,334],{},"Divídelo en dos montones antes de escribir nada. Algunas filas preguntan por la\nplataforma de Supabase y se responden con los documentos de Supabase. Las otras\npreguntan por tu proyecto, y eres la única persona que puede responderlas.",[80,336,337,350],{},[83,338,339],{},[86,340,341,344,347],{},[89,342,343],{},"El cuestionario pregunta",[89,345,346],{},"Quién responde",[89,348,349],{},"Dónde está la respuesta",[99,351,352,363,373,383,393,404,419,429,439],{},[86,353,354,357,360],{},[104,355,356],{},"¿Los datos están cifrados en reposo?",[104,358,359],{},"Supabase",[104,361,362],{},"AES-256, en la página de seguridad de Supabase",[86,364,365,368,370],{},[104,366,367],{},"¿Los datos están cifrados en tránsito?",[104,369,359],{},[104,371,372],{},"TLS en cada API, y en las conexiones directas a Postgres cuando activas la obligación de SSL",[86,374,375,378,380],{},[104,376,377],{},"¿Tu proveedor tiene SOC 2 o ISO 27001?",[104,379,359],{},[104,381,382],{},"Los dos, con los documentos descargables en Team o Enterprise",[86,384,385,388,390],{},[104,386,387],{},"¿Tienes un DPA con tus encargados del tratamiento?",[104,389,359],{},[104,391,392],{},"Forma parte de las condiciones de servicio de Supabase",[86,394,395,398,401],{},[104,396,397],{},"¿Dónde se guardan los datos?",[104,399,400],{},"Tú",[104,402,403],{},"La región que elegiste al crear el proyecto",[86,405,406,409,412],{},[104,407,408],{},"¿Con qué frecuencia se hace copia de seguridad?",[104,410,411],{},"Tu plan",[104,413,414,415],{},"Nada automático en Free, a diario en Pro. ",[31,416,418],{"href":417},"\u002Fblog\u002Fsupabase-free-plan-limits","Qué guarda cada plan",[86,420,421,424,426],{},[104,422,423],{},"¿Quién puede leer qué registros?",[104,425,400],{},[104,427,428],{},"La política de Row Level Security de cada tabla",[86,430,431,434,436],{},[104,432,433],{},"¿Dónde se guardan las credenciales?",[104,435,400],{},[104,437,438],{},"La clave secreta solo en un servidor. La clave publicable está hecha para ser pública",[86,440,441,444,446],{},[104,442,443],{},"¿Quién tiene acceso de administración?",[104,445,400],{},[104,447,448],{},"Los miembros de tu organización de Supabase, con verificación en dos pasos",[10,450,451],{},"Las filas de Supabase se copian tal cual de sus documentos. Las tres últimas son\nlas que el cliente quería averiguar al mandarte el cuestionario, y para\nresponderlas necesitas tu propio proyecto abierto delante.",[23,453,455],{"id":454},"qué-le-digo-a-un-cliente-que-pregunta-quién-puede-leer-los-datos","¿Qué le digo a un cliente que pregunta quién puede leer los datos?",[10,457,458],{},"El estado de tus políticas, tabla por tabla, y la fecha en que las revisaste por\núltima vez. \"Los datos están cifrados\" responde a una pregunta sobre discos\nrobados, y un cliente que pregunta por el acceso está preguntando por la\nventanilla.",[10,460,461,462,465,466,469],{},"Una respuesta clara nombra las tablas que guardan datos personales y dice que\ncada una tiene la Row Level Security activada, con una política que ata cada\nfila a la persona con sesión iniciada a la que pertenece. Dice cuándo\ncomprobaste por última vez desde fuera, como visitante sin sesión, que esas\ntablas no devolvían nada. Si una tabla es pública a propósito, una lista de\nproductos o artículos publicados, también lo dice. Después, la parte de\nadministración: quién puede abrir tu panel de Supabase, con verificación en dos\npasos, y dónde vive la clave secreta. Esa clave se llama ",[181,463,464],{},"service_role"," en los\nproyectos más antiguos y ",[181,467,468],{},"sb_secret_…"," en los más nuevos, y su sitio es un\nservidor.",[10,471,472,473,477,478,236],{},"Para conocer el estado de tus tablas, empieza por el Security Advisor de tu\npanel de Supabase, que enumera cada tabla con la Row Level Security desactivada.\nUna tabla puede pasar esa comprobación y seguir abierta, por una política que\ndeja entrar a todo el mundo.\n",[31,474,476],{"href":475},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","Los cuatro estados en que puede estar una tabla","\nmuestran cómo distinguirlos, y hay una guía en lenguaje sencillo para\n",[31,479,481],{"href":480},"\u002Fis-your-supabase-app-safe","apps de Supabase",[162,483],{"alt":484,"caption":485,"src":486},"La misma petición anónima, marcada anon, enviada a dos tablas que llevan un candado idéntico. Una tiene delante una política que hace de barrera y no devuelve nada. La otra no la tiene y devuelve todas las filas.","Las dos tablas están cifradas exactamente igual. La política es la única diferencia entre las dos respuestas.","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fsame-lock-two-answers-1600x680.png",[10,488,489],{},"Pon por escrito solo lo que hayas comprobado. Si todavía no has leído la\npolítica de una tabla, da la fecha en que lo harás.",[23,491,493],{"id":492},"cómo-comprueba-reeve-la-respuesta-desde-fuera","Cómo comprueba Reeve la respuesta desde fuera",[10,495,496],{},[41,497,498],{},"Las filas que un cuestionario te deja a ti tratan de quién recibe una\nrespuesta. Reeve le pregunta a tu app publicada lo mismo que le preguntaría un\ndesconocido y te dice qué tablas respondieron.",[282,500,501,511,517],{},[285,502,503,506,507,236],{},[41,504,505],{},"El escaneo gratuito"," le pregunta a cada tabla que nombra tu app cuántas\nfilas recibiría un visitante sin sesión, lee el número y se detiene sin\ndescargar ninguna fila. Unos 20 segundos, sin cuenta:\n",[31,508,510],{"href":509},"\u002Fsecurity-scanner","escanea tu app",[285,512,513,516],{},[41,514,515],{},"Reeve Monitor"," vuelve a pasar las nueve comprobaciones cada hora en hasta\ntres apps y te escribe el día en que tu nota empeora, así que una tabla que tu\nbuilder añada después de devolver el cuestionario se revisa en menos de una\nhora.",[285,518,519,522,523,525,526,530,531,236],{},[41,520,521],{},"Care"," hace las mismas comprobaciones y guarda una copia de tu base de datos\nde ",[41,524,359],{}," fuera de tu cuenta de Supabase, tomada con una programación y\nreleída antes de contar, lo que responde a la fila de copias de seguridad.\nCada copia se cifra con AES-256-GCM con una clave que pertenece solo a tu\ncuenta, y ",[31,527,529],{"href":528},"\u002Flegal","nuestra página legal"," explica cómo se guardan esas claves.\n",[31,532,534],{"href":533},"\u002Fsupabase-backups","Cómo se toma una copia y cómo se restaura",[10,536,537,538,236],{},"Qué cubre y cuánto cuesta cada plan está en la\n",[31,539,541],{"href":540},"\u002Fpricing","página de precios",[23,543,545],{"id":544},"qué-hacer-ahora","Qué hacer ahora",[547,548,549],"key-takeaways",{},[282,550,551,554,557,560,563],{},[285,552,553],{},"Responde a las filas de cifrado con la página de seguridad de Supabase: AES-256 en reposo y TLS en tránsito, en todos los planes, sin nada que activar.",[285,555,556],{},"Si un cliente necesita el informe SOC 2 o el certificado ISO 27001 en sí, eso significa el plan Team. Descarga los dos desde Legal Documents en el panel de tu organización.",[285,558,559],{},"Si tu app guarda datos de salud, firma el BAA y completa la lista de HIPAA de Supabase antes de meter nada de eso.",[285,561,562],{},"Responde a las filas de acceso desde tu propio proyecto. Abre el Security Advisor y después lee la política de cada tabla que guarda personas.",[285,564,565],{},"Comprueba el resultado desde fuera, como visitante sin sesión, y pon la fecha junto a tu respuesta.",[10,567,568,569,571],{},"La mitad del cuestionario que trata del cifrado ya tiene respuesta. Antes de\ndevolverlo, ",[31,570,510],{"href":509}," y mira cuáles de tus tablas le\nresponden hoy a un desconocido.",{"title":573,"searchDepth":574,"depth":574,"links":575},"",3,[576,578,579,580,581,582,583,584,585,586,587,588],{"id":25,"depth":577,"text":26},2,{"id":147,"depth":577,"text":148},{"id":169,"depth":577,"text":170},{"id":196,"depth":577,"text":197},{"id":239,"depth":577,"text":240},{"id":249,"depth":577,"text":250},{"id":265,"depth":577,"text":266},{"id":305,"depth":577,"text":306},{"id":330,"depth":577,"text":331},{"id":454,"depth":577,"text":455},{"id":492,"depth":577,"text":493},{"id":544,"depth":577,"text":545},"Fundamentos de seguridad","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcover-1200x630.png","Una puerta redonda de cámara acorazada, cerrada y con cerrojos, en turquesa. Al lado, una ventanilla abierta de la que sale una hoja.","¿Supabase cifra los datos? Sí: AES-256 en reposo, TLS en tránsito, SOC 2 e ISO 27001. Qué cubre cada uno, y la fuga que ninguno de ellos detiene.",false,"md",[596,599,601,603,605,608],{"q":597,"a":598},"¿Supabase cifra mis datos en reposo?","Sí. Supabase cifra todos los datos de sus clientes en reposo con AES-256 y en tránsito con TLS, en todos los planes, sin nada que tengas que activar. Lo que no añade por defecto es una segunda capa sobre columnas concretas dentro de la base de datos, y Supabase ahora desaconseja la función de cifrado de columnas que antes documentaba. Para secretos como la clave API de un servicio externo ofrece Vault.",{"q":197,"a":600},"Sí. Supabase tiene un informe SOC 2 Type 2 de un auditor independiente, renovado cada año sobre un periodo de auditoría que va del 1 de marzo al 28 de febrero. Cubre la plataforma Supabase. Supabase afirma que ese cumplimiento no se extiende fuera de su producto, y los ajustes dentro de tu propio proyecto, como quién puede leer cada tabla, siguen siendo tu responsabilidad.",{"q":240,"a":602},"Descárgalo desde Legal Documents en el panel de tu organización. Está disponible para organizaciones en el plan Team, desde $599 al mes, y en Enterprise. El certificado ISO 27001 y un cuestionario de seguridad estándar están en el mismo sitio. En Free o Pro esa página te ofrece una mejora de plan en su lugar.",{"q":266,"a":604},"Puede cumplir para tu proyecto, y no es automático. Necesitas un Business Associate Agreement firmado y el add-on de HIPAA de pago, ambos desde el plan Team, y Supabase dice que SOC 2 no sustituye a ninguno de los dos. Después marcas el proyecto como proyecto HIPAA y activas lo que Supabase enumera para él, incluidos el inicio de sesión en dos pasos, la recuperación a un punto en el tiempo, la obligación de SSL y las restricciones de red.",{"q":606,"a":607},"¿El cifrado me protege de una tabla mal configurada?","No. El cifrado protege los datos de quien llega al disco o al tráfico sin pasar por la base de datos. Una petición que la base de datos decide responder se descifra para quien la envió, y qué peticiones reciben respuesta lo fija la Row Level Security de cada tabla. En agosto de 2026 encontramos al menos una tabla abierta a un desconocido en 2.096 de las 3.680 apps de Supabase que pudimos revisar.",{"q":609,"a":610},"¿Qué le digo a un cliente que pregunta si sus datos están cifrados?","Que sí, con el detalle: AES-256 en reposo y TLS en tránsito, aplicados por Supabase a cada proyecto, con un informe SOC 2 Type 2 y una certificación ISO 27001 detrás. Luego responde a la pregunta de fondo, que es quién puede leerlos. Nombra las tablas con datos personales, la política de Row Level Security de cada una y la fecha en que comprobaste por última vez, desde fuera, que un visitante sin sesión no recibe nada.","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",[613,614,615,616,617,618,619,620,621,622],"supabase cifra los datos","cifrado supabase","supabase cifrado en reposo","informe soc 2 supabase","supabase cumple soc 2","supabase iso 27001","supabase hipaa","supabase cumple el rgpd","cumplimiento supabase","certificaciones de seguridad supabase",{},true,"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","2026-09-30",{"title":5,"description":592},"blog\u002Fdoes-supabase-encrypt-my-data",[630,631,632],"¿Supabase cifra los datos? Sí. Cada proyecto está cifrado en reposo con AES-256 y en tránsito con TLS, en todos los planes, sin nada que activar.","Supabase también tiene un informe SOC 2 Type 2 y un certificado ISO 27001. Puedes descargar los dos desde el plan Team en adelante, y HIPAA exige además un acuerdo firmado.","Nada de eso decide a quién responde la base de datos. En 2.096 de las 3.680 apps de Supabase que pudimos revisar, una tabla le entregaba sus filas a un desconocido sin iniciar sesión.","d_9eoNXZwJaaEx-I32nvVLzSrb4sCNRyxX6qfeofPpQ",[635,641,647,653,659,665,671,677,683,689,695,701,702,707,714,720,726,731,737,743,749,755,761,767,773,779,785,791,797,803,809,815,821,827,833,839,845,851,857,863,869,875,881,887,893,898,904,910,916,922,928,934,940,946,951,956,962,968,973,978,984],{"path":636,"title":637,"description":638,"published":639,"category":589,"image":640,"draft":593},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" al subir","\"New row violates row-level security policy for table objects\" significa que tu subida no tiene regla insert. Hacer público el bucket no añade ninguna.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":642,"title":643,"description":644,"published":645,"category":589,"image":646,"draft":593},"\u002Fblog\u002Fbase44-security-scan","Escaneo de seguridad de Base44: lo que solo él ve","El escaneo de seguridad de Base44 revisa siete tipos de problema desde dentro. Esta es la mitad que lee y nadie más puede leer, y la mitad que nunca mira.","2026-10-10","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":648,"title":649,"description":650,"published":651,"category":589,"image":652,"draft":593},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Tu clave API se filtró. El orden en el que hay que actuar","Una clave API se filtró y no sabes por dónde empezar. No todas las claves de tu frontend lo son, y el orden importa más que la velocidad.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":654,"title":655,"description":656,"published":657,"category":589,"image":658,"draft":593},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" sin desactivar RLS","\"Infinite recursion detected in policy for relation\" significa que tu policy preguntó a la tabla que protege. Así se rompe el círculo.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":660,"title":661,"description":662,"published":663,"category":589,"image":664,"draft":593},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" en Supabase, y el arreglo equivocado","\"No API key found in request\" significa que tu petición llegó a Supabase sin clave. Casi todas las respuestas apuntan a las reglas de tu base de datos.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":666,"title":667,"description":668,"published":669,"category":589,"image":670,"draft":593},"\u002Fblog\u002Fis-base44-safe","¿Es seguro Base44? Lo que vimos en 5.442 apps Base44","¿Es seguro Base44? Pasamos nueve comprobaciones a 5.442 apps Base44 en producción. Casi todas sacaron B por motivos que su dueño nunca eligió.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":672,"title":673,"description":674,"published":675,"category":589,"image":676,"draft":593},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Ocultar una clave API: muévela a una Edge Function de Supabase","Ocultar una clave API significa sacarla del navegador, y una Edge Function de Supabase es el sitio más pequeño donde ponerla. Dos pasos importan más.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":678,"title":679,"description":680,"published":681,"category":589,"image":682,"draft":593},"\u002Fblog\u002Fenv-file-exposed-on-your-server","¿Tu archivo .env está expuesto? Las doce rutas a revisar","¿Tu archivo .env está expuesto en tu propio servidor web? Doce direcciones te lo dicen, y un acierto significa que todo lo que contiene ya es público.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":684,"title":685,"description":686,"published":687,"category":589,"image":688,"draft":593},"\u002Fblog\u002Fis-v0-safe","Seguridad de v0: las 1.790 aplicaciones escaneadas sacaron una A","Seguridad de v0, medida en 1.790 aplicaciones v0 en vivo: todas sacaron A. Solo 17 nombraban una base de datos, y eso es casi todo lo que mide la A.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":690,"title":691,"description":692,"published":693,"category":589,"image":694,"draft":593},"\u002Fblog\u002Fis-bolt-safe","¿Es seguro Bolt? Lo que vimos en 1.123 aplicaciones Bolt","¿Es seguro Bolt? Pasamos 1.123 aplicaciones Bolt en vivo por nueve comprobaciones. El hosting salió limpio. Los hallazgos eran claves y tablas abiertas dentro.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":696,"title":697,"description":698,"published":699,"category":589,"image":700,"draft":593},"\u002Fblog\u002Fis-supabase-down-or-your-app","¿Supabase está caído o es tu app? Cómo distinguirlo","¿Supabase está caído o es tu app? Un proyecto pausado, una base de datos llena y un fallo tuyo parecen lo mismo. Cuatro comprobaciones los separan.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":625,"title":5,"description":592,"published":626,"category":589,"image":611,"draft":593},{"path":417,"title":703,"description":704,"published":705,"category":589,"image":706,"draft":593},"¿Cuánto cuesta Supabase? Los límites del plan gratuito","Los límites del plan gratuito de Supabase: 500 MB de base de datos, 5 GB de egress y ningún backup. Qué pasa en cada uno y qué cambia Pro por $25.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":708,"title":709,"description":710,"published":711,"category":712,"image":713,"draft":593},"\u002Fblog\u002Ftest-your-supabase-backup","Prueba tu backup de Supabase antes del día que lo necesites","Cómo probar tu backup de Supabase: restaurarlo en un proyecto de prueba, contar filas, iniciar sesión y buscar la línea que le falta a un archivo cortado.","2026-09-28","Backups","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":715,"title":716,"description":717,"published":718,"category":712,"image":719,"draft":593},"\u002Fblog\u002Fsupabase-backup-github-action","Backup gratis de Supabase con una GitHub Action, y la trampa","Un backup de Supabase con GitHub Action es gratis y sirve a muchas apps. El workflow, el connection string correcto y el egress de cada ejecución.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":721,"title":722,"description":723,"published":724,"category":712,"image":725,"draft":593},"\u002Fblog\u002Fdownload-your-supabase-backup","Por qué no puedes descargar tu backup de Supabase","No puedes descargar tu backup de Supabase en un proyecto actual: la copia diaria es una instantánea física. Cómo comprobarlo y tener tu propia copia.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":727,"title":728,"description":729,"published":724,"category":589,"image":730,"draft":593},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": el grant que falta","Desde el 30 de octubre, una tabla nueva de Supabase responde \"permission denied for table\" hasta que le das acceso. El grant del email es la mitad del arreglo.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":732,"title":733,"description":734,"published":735,"category":589,"image":736,"draft":593},"\u002Fblog\u002Fopen-api-endpoint-exposed","¿Un endpoint de API abierto es un problema? Mira el JSON","Tu escaneo señaló un endpoint de API abierto. Que importe depende de lo que devolvió, y la mayoría de los que encontramos eran de la plataforma.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":738,"title":739,"description":740,"published":741,"category":589,"image":742,"draft":593},"\u002Fblog\u002Flovable-security-scan","Escaneo de seguridad de Lovable: lo que no puede probar","Escaneo de seguridad de Lovable: qué revisan el Quick scan y el Deep scan, cuándo corre cada uno, y lo único que ningún escaneo desde dentro puede probar.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":744,"title":745,"description":746,"published":747,"category":712,"image":748,"draft":593},"\u002Fblog\u002Fsupabase-backup-auth-users","Por qué tu dump de Supabase no tiene usuarios dentro","Ejecuta supabase db dump por sí solo y obtienes la forma de tu base de datos y ninguna de sus filas, sin el esquema auth donde viven tus usuarios.","2026-09-23","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":750,"title":751,"description":752,"published":753,"category":589,"image":754,"draft":593},"\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":756,"title":757,"description":758,"published":759,"category":589,"image":760,"draft":593},"\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":762,"title":763,"description":764,"published":765,"category":589,"image":766,"draft":593},"\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":768,"title":769,"description":770,"published":771,"category":589,"image":772,"draft":593},"\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":774,"title":775,"description":776,"published":777,"category":589,"image":778,"draft":593},"\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":780,"title":781,"description":782,"published":783,"category":589,"image":784,"draft":593},"\u002Fblog\u002Fbase44-source-maps","Seguridad en Base44: qué marca un escaneo y qué te toca arreglar a ti","Seguridad en Base44 en 5.438 apps escaneadas: tres hallazgos en casi todas son de la plataforma, el source map es la insignia de Base44 y lo tuyo es poco.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":786,"title":787,"description":788,"published":789,"category":589,"image":790,"draft":593},"\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":792,"title":793,"description":794,"published":795,"category":589,"image":796,"draft":593},"\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":798,"title":799,"description":800,"published":801,"category":712,"image":802,"draft":593},"\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":804,"title":805,"description":806,"published":807,"category":712,"image":808,"draft":593},"\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":810,"title":811,"description":812,"published":813,"category":712,"image":814,"draft":593},"\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":816,"title":817,"description":818,"published":819,"category":589,"image":820,"draft":593},"\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":822,"title":823,"description":824,"published":825,"category":589,"image":826,"draft":593},"\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":828,"title":829,"description":830,"published":831,"category":589,"image":832,"draft":593},"\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":834,"title":835,"description":836,"published":837,"category":589,"image":838,"draft":593},"\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":840,"title":841,"description":842,"published":843,"category":589,"image":844,"draft":593},"\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":846,"title":847,"description":848,"published":849,"category":589,"image":850,"draft":593},"\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":852,"title":853,"description":854,"published":855,"category":589,"image":856,"draft":593},"\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":858,"title":859,"description":860,"published":861,"category":589,"image":862,"draft":593},"\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":864,"title":865,"description":866,"published":867,"category":589,"image":868,"draft":593},"\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":870,"title":871,"description":872,"published":873,"category":589,"image":874,"draft":593},"\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":876,"title":877,"description":878,"published":879,"category":712,"image":880,"draft":593},"\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":882,"title":883,"description":884,"published":885,"category":589,"image":886,"draft":593},"\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":888,"title":889,"description":890,"published":891,"category":712,"image":892,"draft":593},"\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":234,"title":894,"description":895,"published":896,"category":589,"image":897,"draft":593},"¿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":899,"title":900,"description":901,"published":902,"category":589,"image":903,"draft":593},"\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":905,"title":906,"description":907,"published":908,"category":589,"image":909,"draft":593},"\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":911,"title":912,"description":913,"published":914,"category":589,"image":915,"draft":593},"\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":917,"title":918,"description":919,"published":920,"category":712,"image":921,"draft":593},"\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":923,"title":924,"description":925,"published":926,"category":712,"image":927,"draft":593},"\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":929,"title":930,"description":931,"published":932,"category":589,"image":933,"draft":593},"\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":935,"title":936,"description":937,"published":938,"category":589,"image":939,"draft":593},"\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":941,"title":942,"description":943,"published":944,"category":712,"image":945,"draft":593},"\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":191,"title":947,"description":948,"published":949,"category":589,"image":950,"draft":593},"¿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":952,"title":953,"description":954,"published":949,"category":589,"image":955,"draft":593},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source maps expuestos: tu app está publicando su código original","Un source map expuesto deja que cualquiera lea el código original de tu app, comentarios incluidos. La comprobación de 30 segundos y lo que de verdad importa.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":957,"title":958,"description":959,"published":960,"category":589,"image":961,"draft":593},"\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":963,"title":964,"description":965,"published":966,"category":712,"image":967,"draft":593},"\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":475,"title":969,"description":970,"published":971,"category":589,"image":972,"draft":593},"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":974,"title":975,"description":976,"published":971,"category":712,"image":977,"draft":593},"\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":979,"title":980,"description":981,"published":982,"category":712,"image":983,"draft":593},"\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":985,"title":986,"description":987,"published":982,"category":589,"image":988,"draft":593},"\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",1791705962986]