[{"data":1,"prerenderedAt":773},["ShallowReactive",2],{"blog-pt-safest-ai-app-builder":3,"blog-index-pt":533},{"id":4,"title":5,"body":6,"category":492,"cover":493,"coverAlt":494,"description":495,"draft":496,"extension":497,"faq":498,"image":514,"keywords":515,"meta":521,"navigation":522,"ogTitle":28,"path":523,"published":524,"seo":525,"stem":526,"tldr":527,"updated":531,"__hash__":532},"blog_pt\u002Fblog\u002Fsafest-ai-app-builder.md","Qual builder de apps com IA é mais seguro? 30.998 apps testados",{"type":7,"value":8,"toc":480},"minimark",[9,13,16,24,29,32,35,38,42,45,58,61,65,68,71,79,83,86,235,248,256,259,280,287,291,294,297,300,306,314,322,326,329,332,421,426,429,439,443,465,472],[10,11,12],"p",{},"Você escolheu um builder antes de saber qualquer coisa sobre qualquer um deles.\nTalvez uma thread recomendasse um, talvez você tenha gostado da demo, talvez\nfosse o que seu amigo usava. E em algum momento desde então você viu alguém\nafirmar que justo o que você escolheu é o inseguro, e se perguntou se o builder\nde apps com IA mais seguro era outro esse tempo todo.",[10,14,15],{},"Então medimos. Em agosto de 2026 escaneamos 30.998 apps no ar publicados pelo\nLovable, Base44, Replit, v0 e Bolt, e rodamos as mesmas nove verificações\nexternas em cada um deles.",[10,17,18,19,23],{},"Esta é a parte que os comparativos erram: ",[20,21,22],"strong",{},"o builder que você escolheu quase\nnunca é o que decide se seu app está exposto."," Os cinco voltaram entre 99% e\n100% com pelo menos um achado. As diferenças reais entre eles são grandes, e são\ndiferenças de padrão de fábrica em vez de segurança.",[25,26,28],"h2",{"id":27},"qual-builder-de-apps-com-ia-é-mais-seguro","Qual builder de apps com IA é mais seguro?",[10,30,31],{},"Nenhum, e o ranking que você procura não existe.",[10,33,34],{},"Todo builder deste escaneamento produziu apps com achados, em ritmo parecido,\nporque o achado mais comum é definido pela hospedagem e não por quem construiu o\napp. Abaixo dessa manchete os builders se separam bastante, mas se separam em\ncoisas como se seu código-fonte é publicado junto com seu app, não em se um\nestranho consegue ler seus usuários.",[10,36,37],{},"O que separa um A de um D é algo que você fez depois de escolher o builder.\nGeralmente é uma decisão: você conectou um banco de dados.",[25,39,41],{"id":40},"o-que-medimos","O que medimos",[10,43,44],{},"As mesmas nove verificações que rodaríamos no seu app, lidas de fora, sem login e\nsem acesso à conta de ninguém.",[10,46,47,48,51,52,57],{},"Escaneamos cada app entre 12 e 14 de agosto de 2026, e 30.998 deles deram um\nresultado que conseguimos classificar. Toda porcentagem abaixo é uma fatia dos\napps em que aquela verificação de fato ",[20,49,50],{},"respondeu",", nunca uma fatia de tudo o\nque escaneamos. Uma verificação que não conseguiu concluir fica registrada como\ndesconhecida, não como aprovada, e é por isso que os denominadores mudam nas\ntabelas. O método completo e os dados por trás estão\n",[53,54,56],"a",{"href":55},"\u002Fresearch\u002Fvibe-coded-app-security-2026","no relatório",".",[10,59,60],{},"Duas coisas que não fizemos. Não entramos em lugar nenhum e não lemos as linhas\nde ninguém: onde uma tabela respondeu, perguntamos ao banco quantas linhas ele\nentregaria e paramos ali. Nenhum app é citado pelo nome aqui nem em nada que\npublicamos.",[25,62,64],{"id":63},"todo-builder-está-em-99-e-esse-número-diz-menos-do-que-parece","Todo builder está em 99%, e esse número diz menos do que parece",[10,66,67],{},"Porque quase tudo isso é um único achado, e esse achado é da plataforma.",[10,69,70],{},"Cabeçalhos de segurança ausentes apareceram em 18.539 de 18.554 apps do Lovable,\nnos 5.438 apps do Base44, em 1.790 de 1.790 do v0, em 1.121 de 1.123 do Bolt e em\n2.924 de 3.042 do Replit. Cabeçalhos são enviados por quem serve seu app, então\nno domínio de um builder eles são uma propriedade daquele domínio e idênticos em\ntodo app que está ali.",[10,72,73,74,78],{},"É um achado real e vale fechar quando você for para seu próprio domínio. Mas é a\n",[53,75,77],{"href":76},"\u002Fblog\u002Fmissing-security-headers","linha menos urgente de um relatório",", e é a\nmaior parte do que a frase \"99% dos apps têm um problema\" está contando.",[25,80,82],{"id":81},"a-diferença-real-entre-builders-são-os-padrões-de-fábrica","A diferença real entre builders são os padrões de fábrica",[10,84,85],{},"Cada builder entrega um conjunto diferente de padrões, e eles aparecem em quase\ntodo app que ele faz.",[87,88,89,118],"table",{},[90,91,92],"thead",{},[93,94,95,99,103,106,109,112,115],"tr",{},[96,97,98],"th",{},"Builder",[96,100,102],{"align":101},"right","Apps escaneados",[96,104,105],{"align":101},"Pelo menos um achado",[96,107,108],{"align":101},"Código-fonte publicado",[96,110,111],{"align":101},"Achado cross-origin",[96,113,114],{"align":101},"Chave secreta publicada",[96,116,117],{"align":101},"Nota D ou F",[119,120,121,145,170,192,213],"tbody",{},[93,122,123,127,130,133,136,139,142],{},[124,125,126],"td",{},"Lovable",[124,128,129],{"align":101},"18.554",[124,131,132],{"align":101},"99%",[124,134,135],{"align":101},"225 de 18.553",[124,137,138],{"align":101},"8 de 18.518",[124,140,141],{"align":101},"822 (4%)",[124,143,144],{"align":101},"407",[93,146,147,150,153,156,159,164,167],{},[124,148,149],{},"Base44",[124,151,152],{"align":101},"5.438",[124,154,155],{"align":101},"100%",[124,157,158],{"align":101},"3.229 de 5.434 (59%)",[124,160,161],{"align":101},[20,162,163],{},"5.418 de 5.419 (99%)",[124,165,166],{"align":101},"103 (2%)",[124,168,169],{"align":101},"2",[93,171,172,175,178,180,183,186,189],{},[124,173,174],{},"Replit",[124,176,177],{"align":101},"3.042",[124,179,132],{"align":101},[124,181,182],{"align":101},"168 de 3.041 (6%)",[124,184,185],{"align":101},"1.129 de 3.037 (37%)",[124,187,188],{"align":101},"219 (7%)",[124,190,191],{"align":101},"9",[93,193,194,197,200,202,205,208,211],{},[124,195,196],{},"v0",[124,198,199],{"align":101},"1.790",[124,201,155],{"align":101},[124,203,204],{"align":101},"0 de 1.790",[124,206,207],{"align":101},"0 de 1.786",[124,209,210],{"align":101},"0",[124,212,210],{"align":101},[93,214,215,218,221,223,226,229,232],{},[124,216,217],{},"Bolt",[124,219,220],{"align":101},"1.123",[124,222,155],{"align":101},[124,224,225],{"align":101},"13 de 1.123",[124,227,228],{"align":101},"5 de 1.120",[124,230,231],{"align":101},"75 (7%)",[124,233,234],{"align":101},"15",[10,236,237,238,242,243,247],{},"A coluna de source maps é a que precisa ser lida com cuidado, porque no Base44\nela não mede a mesma coisa que nas outras quatro. Reabrimos 30 apps do Base44\nmarcados em setembro: em 27, o único mapa que respondia era\n",[239,240,241],"code",{},"\u002Fstatic\u002Fjs\u002Fbadge.js.map",", o do script de selo do Base44, e em nenhum dos 30\nhavia mapa cobrindo os arquivos do dono. Então esses 59% são uma plataforma\npublicando um arquivo dela mesma em cada app que hospeda, e não 3.229 donos\nperdendo o próprio código. No Lovable, no Replit e no Bolt a mesma coluna\nsignifica mesmo o código do dono, e é por isso que 1%, 6% e 59% não se leem de\ncima a baixo como um ranking.\n",[53,244,246],{"href":245},"\u002Fblog\u002Fbase44-source-maps","O que achamos dentro desses mapas do Base44"," é o\nrelato completo.",[10,249,250,251,255],{},"A coluna dos 99% é a de verdade, e também é obra do próprio Base44: a plataforma\ndefine o CORS para cada app que hospeda e não oferece ajuste por app.\nCódigo-fonte publicado quer dizer, quando é o seu, que os arquivos originais por\ntrás do seu app dão para ler nas ferramentas de desenvolvedor do navegador.\n",[53,252,254],{"href":253},"\u002Fblog\u002Fsource-maps-exposed-in-production","O que isso expõe e o que não expõe","\nvale a leitura se você está numa das outras quatro.",[10,257,258],{},"A coluna das chaves secretas é a que todo mundo espera que domine, e ela não\ndomina. Uma chave digna de menção apareceu em 4% a 7% dos apps em três dos cinco\nbuilders, e em nenhum dos apps do v0.",[10,260,261,262,265,266,269,270,265,273,276,277,57],{},"Se você quer a versão em linguagem simples para o builder que realmente usa, cada\num tem sua página: ",[53,263,126],{"href":264},"\u002Fis-your-lovable-app-safe",",\n",[53,267,149],{"href":268},"\u002Fis-your-base44-app-safe",", ",[53,271,174],{"href":272},"\u002Fis-your-replit-app-safe",[53,274,196],{"href":275},"\u002Fis-your-v0-app-safe"," e ",[53,278,217],{"href":279},"\u002Fis-your-bolt-app-safe",[10,281,282,283,57],{},"Ou pule a leitura: nossa verificação gratuita roda essas mesmas checagens no seu\nsite no ar e diz em quais seu app tropeça. Uns 20 segundos, sem conta:\n",[53,284,286],{"href":285},"\u002F#scan","verifique seu app",[25,288,290],{"id":289},"o-que-decide-mesmo-um-d-ou-um-f","O que decide mesmo um D ou um F",[10,292,293],{},"Um banco de dados, e o que você fez com ele.",[10,295,296],{},"O Lovable produziu 407 apps com nota D ou F em 18.554. O v0 não produziu nenhum\nem 1.790. Isso parece um veredito sobre os dois builders até você olhar o que\nesses apps são: 35% dos apps do Lovable citam um projeto de banco, contra mais ou\nmenos 1% dos apps do v0.",[10,298,299],{},"As verificações que podem produzir um D ou um F são quase todas verificações de\nbanco. Um app sem banco tem menos coisa que pode dar errado e menos coisa para\nolharmos. Então a linha do Lovable não está medindo um builder pior, está medindo\num builder cujos usuários conectam bancos de dados, que é a maior parte do motivo\npelo qual as pessoas o escolhem.",[301,302],"diagram",{"alt":303,"caption":304,"src":305},"Dois apps desenhados lado a lado como painéis idênticos. O da esquerda tem um único bloco vazio com três marcas verdes embaixo e a letra A no canto de cima. O da direita tem o mesmo bloco e as mesmas três marcas, com uma linha pontilhada descendo até um cilindro de banco de dados vermelho e uma cruz vermelha, e a letra D no canto de cima.","As verificações externas saem iguais nos dois. Tudo o que pode produzir uma nota séria mora na parte que você mesmo conectou.","\u002Fblog\u002Fsafest-ai-app-builder\u002Fwhere-a-grade-comes-from-1600x700.png",[10,307,308,309,313],{},"Dos 3.553 apps do Lovable cujo banco nos respondeu, 2.017 tinham pelo menos uma\ntabela que um estranho conseguia ler sem login. Esse é\n",[53,310,312],{"href":311},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","o achado para consertar primeiro",",\ne ele não tem nada a ver com qual builder gerou sua interface.",[10,315,316,317,321],{},"É no Lovable que esse número é grande o bastante para merecer um artigo\npróprio: ",[53,318,320],{"href":319},"\u002Fblog\u002Fis-lovable-safe","o que vimos em 18.554 aplicativos Lovable","\npassa as mesmas nove verificações pela maior coorte que temos.",[25,323,325],{"id":324},"por-que-não-vamos-fazer-um-ranking","Por que não vamos fazer um ranking",[10,327,328],{},"Porque em três dos cinco não conseguimos verificar bancos suficientes para dizer\nqualquer coisa.",[10,330,331],{},"Esta é a parte dos dados que todo ranking deixa de fora:",[87,333,334,349],{},[90,335,336],{},[93,337,338,340,343,346],{},[96,339,98],{},[96,341,342],{"align":101},"Cita um projeto de banco",[96,344,345],{"align":101},"Bancos que nos responderam",[96,347,348],{},"Tinha uma tabela legível",[119,350,351,364,378,393,408],{},[93,352,353,355,358,361],{},[124,354,126],{},[124,356,357],{"align":101},"35%",[124,359,360],{"align":101},"3.553",[124,362,363],{},"2.017, ou 57%",[93,365,366,368,371,375],{},[124,367,149],{},[124,369,370],{"align":101},"27%",[124,372,373],{"align":101},[20,374,169],{},[124,376,377],{},"2 dos 2 que alcançamos",[93,379,380,382,385,390],{},[124,381,217],{},[124,383,384],{"align":101},"24%",[124,386,387],{"align":101},[20,388,389],{},"35",[124,391,392],{},"27 dos 35 que alcançamos",[93,394,395,397,400,405],{},[124,396,174],{},[124,398,399],{"align":101},"1%",[124,401,402],{"align":101},[20,403,404],{},"5",[124,406,407],{},"4 dos 5 que alcançamos",[93,409,410,412,414,418],{},[124,411,196],{},[124,413,399],{"align":101},[124,415,416],{"align":101},[20,417,210],{},[124,419,420],{},"nada a verificar",[301,422],{"alt":423,"caption":424,"src":425},"Cinco linhas, cada uma encabeçada pelo logo de um builder e pelo número de apps dele que escaneamos. Cada linha desenha esses apps como uma barra clara com os bancos que nos responderam preenchidos em sólido. A parte sólida do Lovable é um bloco largo marcando 3.553; as de Base44, Replit e Bolt são fios marcando 2, 5 e 35, e a do v0 é um círculo vazio pontilhado marcando 0.","A parte sólida de cada barra é o que conseguimos verificar de verdade. Quatro das cinco são finas demais para sustentar uma porcentagem.","\u002Fblog\u002Fsafest-ai-app-builder\u002Fwhat-we-could-check-1600x620.png",[10,427,428],{},"Olhe a linha do Base44. Mais de um quarto dos apps dele cita um projeto de banco,\ne exatamente dois desses bancos chegaram a nos responder. Não vamos transformar\ndois apps numa taxa e colocá-la ao lado de um número construído sobre 3.553. E\nninguém mais que escaneou de fora consegue fazer isso, diga o que disser a tabela\ncomparativa dessa pessoa.",[430,431,433],"callout",{"type":432},"warn",[10,434,435,438],{},[20,436,437],{},"Uma verificação que não conseguiu concluir não é uma verificação aprovada.","\nEssa é a regra que decide quase tudo o que está acima, e é a que some\ndiscretamente assim que um escaneamento vira ranking. Um app que não conseguimos\nalcançar é desconhecido. Um banco que nunca respondeu é desconhecido. Contar\nqualquer um dos dois como limpo produz um gráfico mais arrumado e falso, e é a\npior coisa que um relatório de segurança pode fazer com alguém que depois para de\nse preocupar.",[25,440,442],{"id":441},"o-que-verificar-no-seu-próprio-app","O que verificar no seu próprio app",[444,445,446],"key-takeaways",{},[447,448,449,453,456,459,462],"ul",{},[450,451,452],"li",{},"Pare de procurar um builder mais seguro. Nada nesses dados justifica uma mudança, e mudar reconstrói seu app inteiro para trocar uma linha pela qual você nunca foi avaliado.",[450,454,455],{},"Comece pelas suas tabelas de banco, seja qual for o builder que você usou. Uma tabela que um estranho consegue ler é o achado que esvazia um app, e é a única coisa aqui que só você pode consertar.",[450,457,458],{},"Descubra se seu builder publica seu código-fonte e desligue isso se publicar. É um ajuste, e numa das cinco plataformas acima ele vem ligado de fábrica em três de cada cinco apps.",[450,460,461],{},"Trate o achado dos cabeçalhos como manutenção. É real, vale para quase todo app no domínio de um builder, e não é o que alguém vai usar contra você.",[450,463,464],{},"Verifique qualquer chave no seu código publicado antes de se preocupar com o resto desta página, porque esse é o único achado que já está custando dinheiro enquanto você lê.",[10,466,467,468,57],{},"Tudo isso dá para verificar na mão. Manter a resposta verdadeira mês que vem é a\nparte que não fica pronta, e é para isso que o Reeve Care existe: ele roda essas\nmesmas verificações num calendário e avisa quando uma resposta piora, e guarda\ncópias verificadas do seu banco fora da conta do seu provedor, para que exista\nalgo para devolver. Essa segunda metade importa aqui porque só verificamos a\nleitura, e a mesma regra permissiva que deixa um estranho ler uma tabela costuma\ndeixar ele escrever nela. ",[53,469,471],{"href":470},"\u002Fpricing","O que ele vigia e quanto custa",[10,473,474,475,479],{},"Se você prefere avançar com uma lista, a\n",[53,476,478],{"href":477},"\u002Fchecklist","checklist de segurança de 10 minutos"," cobre o conjunto em linguagem\nsimples.",{"title":481,"searchDepth":482,"depth":482,"links":483},"",3,[484,486,487,488,489,490,491],{"id":27,"depth":485,"text":28},2,{"id":40,"depth":485,"text":41},{"id":63,"depth":485,"text":64},{"id":81,"depth":485,"text":82},{"id":289,"depth":485,"text":290},{"id":324,"depth":485,"text":325},{"id":441,"depth":485,"text":442},"Noções de segurança","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcover-1200x630.png","Cinco blocos brancos idênticos em fila sobre fundo escuro, do mesmo tamanho e bem espaçados, cada um com o logo de um builder.","Qual builder de apps com IA é mais seguro? Escaneamos 30.998 apps no ar do Lovable, Base44, Replit, v0 e Bolt. O builder não é o que decide sua nota.",false,"md",[499,502,505,508,511],{"q":500,"a":501},"Qual builder faz os apps mais seguros?","Nenhum, de forma mensurável. Em 30.998 apps no ar, todo builder que escaneamos ficou entre 99% e 100% com pelo menos um achado, e a maior parte disso são cabeçalhos de segurança ausentes, definidos pela hospedagem e não por você. As diferenças entre builders são diferenças de padrão de fábrica: o que é publicado junto com seu app e como a conexão com sua API está configurada. Nenhum desses padrões produz uma nota séria.",{"q":503,"a":504},"Faz alguma diferença qual builder eu escolhi?","Faz diferença para o que você herda no primeiro dia, e bem pouca para o que acontece depois. Alguns builders publicam seu código-fonte com todo app, outros não. Alguns definem uma regra cross-origin escancarada por padrão, outros não. Vale saber disso e quase sempre vale mudar. Mas o achado que de fato custa os dados das pessoas é uma tabela de banco legível, e você consegue isso conectando um banco e escrevendo uma regra permissiva. Dá para fazer em qualquer builder.",{"q":506,"a":507},"Todo app do meu builder falhou na verificação de cabeçalhos. A culpa é minha?","Não, e normalmente você também não consegue mudar isso de dentro do builder. Cabeçalhos de segurança são enviados por quem serve seu app, então num domínio do builder eles são o padrão da plataforma e idênticos em todo app que está ali. É exatamente por isso que o número é 99% ou 100% nos cinco. E é pelo mesmo motivo a linha menos urgente de um relatório: é real, vale fechar quando você for para seu próprio domínio, e não diz nada sobre alguém conseguir chegar nos seus dados.",{"q":509,"a":510},"O v0 teve zero apps com nota D ou F. Isso faz dele o mais seguro?","Faz dele o com menos bancos de dados conectados. Só cerca de 1% dos apps do v0 que escaneamos citava algum projeto de banco, contra 35% dos apps do Lovable, e as verificações que produzem um D ou um F são verificações de banco. Um app sem banco tem menos coisa que pode dar errado e menos coisa que podemos olhar. Leia essa linha como informação sobre o que esses apps são, não sobre o quanto o builder os protege.",{"q":512,"a":513},"Devo mudar meu app para outro builder para deixá-lo mais seguro?","Não. Mudar significa reconstruir tudo e não muda quase nada desta lista, porque os achados que importam moram nos serviços que você conectou e não no builder que gerou seu código. Os dois que valem a pena são as regras nas suas tabelas e qualquer chave secreta parada no seu código publicado. Os dois te seguem para qualquer builder, e os dois têm conserto onde você já está.","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",[516,517,518,519,520],"builder de apps com ia mais seguro","qual builder de apps com ia é mais seguro","comparativo de segurança builders ia","lovable vs bolt segurança","apps feitos com ia são seguros",{},true,"\u002Fblog\u002Fsafest-ai-app-builder","2026-09-11",{"title":5,"description":495},"blog\u002Fsafest-ai-app-builder",[528,529,530],"Não existe um builder de apps com IA mais seguro. Os cinco que escaneamos ficaram entre 99% e 100% com pelo menos um achado, e quase tudo isso é um cabeçalho de navegador que a hospedagem deles define.","O que muda entre builders são os padrões de fábrica, e as distâncias são grandes. Os 3.229 source maps do Base44 em 5.434 são o script de selo da plataforma, não o app de ninguém; os 225 do Lovable em 18.553 são código do dono.","O que decide uma nota séria não é o builder. É se você conectou um banco de dados e deixou uma tabela legível.","2026-09-21","x8c-wxPrlYuIOzefkMOn3-2fp4Ae1-BDGMzgtl_Xt40",[534,541,547,551,557,563,569,574,580,586,592,598,604,605,611,617,623,629,635,641,646,652,658,664,670,676,682,688,694,700,706,712,718,724,730,735,739,745,751,757,762,768],{"path":535,"title":536,"description":537,"published":538,"category":539,"image":540,"draft":496},"\u002Fblog\u002Fsupabase-backup-auth-users","Por que seu dump do Supabase não tem usuários dentro","Rode supabase db dump sozinho e você recebe a forma do seu banco e nenhuma das linhas dele, sem o schema auth onde seus usuários moram.","2026-09-23","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":542,"title":543,"description":544,"published":545,"category":492,"image":546,"draft":496},"\u002Fblog\u002Fdomain-and-certificate-expiry","Domínio expirado, site fora do ar: o que acontece agora","Seu domínio expirou e seu site está fora do ar. O relógio que começa a correr, por que o certificado é o problema menor, e como conferir os dois.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":319,"title":548,"description":549,"published":531,"category":492,"image":550,"draft":496},"O Lovable é seguro? O que vimos em 18.554 aplicativos Lovable","O Lovable é seguro? Passamos 18.554 aplicativos Lovable no ar por nove verificações. A plataforma foi a mais limpa de cinco. Os achados estavam nos aplicativos.","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":552,"title":553,"description":554,"published":555,"category":492,"image":556,"draft":496},"\u002Fblog\u002Fvibe-coded-app-security-checklist","O checklist de segurança do vibe coding, em nove verificações","Um checklist de segurança do vibe coding com nove itens, cada um verificável no seu app de fora por qualquer pessoa, e cada um com um teste de uma linha.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":558,"title":559,"description":560,"published":561,"category":492,"image":562,"draft":496},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Uma chave secreta da Stripe no frontend pode mover dinheiro","Uma chave secreta da Stripe exposta no seu frontend pode reembolsar, cobrar e ler cada ficha de cliente que você tem. Sua chave pk_live_ é que deve estar aí.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":564,"title":565,"description":566,"published":567,"category":492,"image":568,"draft":496},"\u002Fblog\u002Fvite-and-next-public-env-vars","Variáveis de ambiente do Vite expostas: o prefixo diz publique isto","Variáveis de ambiente do Vite expostas no seu app: fizeram o que o prefixo pediu. VITE_ e NEXT_PUBLIC_ significam publique isto, e a IA nunca soube o custo.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":245,"title":570,"description":571,"published":572,"category":492,"image":573,"draft":496},"Segurança no Base44: o que um scan aponta e o que é seu para corrigir","Segurança no Base44 em 5.438 apps escaneados: três achados em quase todos são da plataforma, o source map é o selo do Base44, e a sua parte é uma lista curta.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":575,"title":576,"description":577,"published":578,"category":492,"image":579,"draft":496},"\u002Fblog\u002Fis-cursor-ai-safe","O Cursor AI é seguro? O editor, o código e o app que você publicou","O Cursor AI é seguro? Três perguntas em uma busca: o que o Cursor guarda, o que o código que ele escreve erra, e se o app que você publicou está aberto.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":581,"title":582,"description":583,"published":584,"category":492,"image":585,"draft":496},"\u002Fblog\u002Fis-replit-safe","O Replit é seguro? O que vimos em 3.042 aplicativos Replit no ar","O Replit é seguro? Passamos 3.042 aplicativos Replit no ar por nove verificações externas. Os achados estavam no aplicativo publicado, não no host.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":587,"title":588,"description":589,"published":590,"category":539,"image":591,"draft":496},"\u002Fblog\u002Fsupabase-storage-backup","Supabase storage backup: sua cópia do banco não tem nenhum arquivo","Um Supabase storage backup é uma tarefa à parte. Os backups do banco guardam a lista dos seus arquivos e nenhum deles, então cada upload fica quebrado.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":593,"title":594,"description":595,"published":596,"category":539,"image":597,"draft":496},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-time recovery do Supabase: preço e limites","O point-in-time recovery do Supabase rebobina seu banco para qualquer segundo da última semana. Custa $100 por mês além do Pro e cobre só o banco.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":599,"title":600,"description":601,"published":602,"category":539,"image":603,"draft":496},"\u002Fblog\u002Fsupabase-project-paused-recover","Projeto Supabase pausado? Seus dados continuam lá","O Supabase pausou seu projeto depois de uma semana sem atividade. Nada foi apagado, Restaurar fica ao lado do nome e você tem um ano antes disso mudar.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":523,"title":5,"description":495,"published":524,"category":492,"image":514,"draft":496},{"path":606,"title":607,"description":608,"published":609,"category":492,"image":610,"draft":496},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Ative Row Level Security em toda tabela do Supabase e comprove","Ativar Row Level Security no Supabase sem política fecha a tabela por completo. Uma política sem a chave ligada não faz nada. Aqui está o SQL, e o teste.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":612,"title":613,"description":614,"published":615,"category":492,"image":616,"draft":496},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": o que o aviso não vê","O Supabase marca \"RLS disabled in public\" como erro. Ele não diz nada sobre a política de leitura que deixa a sua tabela igualmente aberta.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":618,"title":619,"description":620,"published":621,"category":492,"image":622,"draft":496},"\u002Fblog\u002Frotate-supabase-service-role-key","Como rotacionar uma chave service_role do Supabase vazada","O Supabase manda fechar o vazamento primeiro. Outros guias mandam rotacionar agora. O que vale depende de para onde a sua chave service_role vazou.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":624,"title":625,"description":626,"published":627,"category":492,"image":628,"draft":496},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Scanners de segurança para vibe coding comparados, o nosso incluído","O melhor scanner de segurança para vibe coding depende de três perguntas que nenhuma lista de recursos responde. Dez ferramentas comparadas, com preços.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":630,"title":631,"description":632,"published":633,"category":492,"image":634,"draft":496},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker: faça você mesmo as cinco verificações","Um Supabase security checker lê o seu app publicado em vez das configurações do projeto. Aqui estão as cinco verificações e como fazer cada uma sozinho.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":636,"title":637,"description":638,"published":639,"category":492,"image":640,"draft":496},"\u002Fblog\u002Fvibe-coding-security-scanner","Scanner de segurança para vibe coding: o que ele não vê","Um scanner de segurança para vibe coding lê seu app no ar, de fora. O que isso cobre, as quatro coisas que ele não consegue ver e como ler o resultado.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":76,"title":642,"description":643,"published":644,"category":492,"image":645,"draft":496},"Cabeçalhos de segurança faltando: quando isso importa","Cabeçalhos de segurança faltando é o achado que nosso scanner mais imprime. Contra o que eles protegem e quando são a linha menos urgente do relatório.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":647,"title":648,"description":649,"published":650,"category":492,"image":651,"draft":496},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Sua chave de API da OpenAI está exposta no frontend. Troque-a.","Uma chave de API da OpenAI exposta no frontend não pode ser presa a um domínio. Troque-a hoje, mova a chamada para o seu servidor e limite o gasto.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":653,"title":654,"description":655,"published":656,"category":492,"image":657,"draft":496},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","Chave de API exposta no frontend: o que 30.998 apps entregam","Uma chave de API exposta no seu frontend costuma ser uma chave do Google Maps. Escaneamos 30.998 apps vibe-coded e contamos quais segredos vazam de verdade.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":659,"title":660,"description":661,"published":662,"category":539,"image":663,"draft":496},"\u002Fblog\u002Fsupabase-backup-tools-compared","Ferramentas de backup do Supabase comparadas, a nossa incluída","Quatro tipos de ferramenta de backup do Supabase, o que cada uma copia de verdade e quando uma GitHub Action gratuita ganha de pagar, nós inclusive.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":665,"title":666,"description":667,"published":668,"category":492,"image":669,"draft":496},"\u002Fblog\u002Freplit-secrets-explained","Como usar secrets no Replit, e o que ainda assim é publicado","Como usar secrets no Replit: adicionar um, ler de volta e resolver as duas causas do undefined. E as chaves que a ferramenta Secrets não consegue proteger.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":671,"title":672,"description":673,"published":674,"category":539,"image":675,"draft":496},"\u002Fblog\u002Fback-up-supabase-free-tier","Backups do plano gratuito do Supabase: como fazer sem terminal","No plano gratuito do Supabase não existe backup nenhum: a cópia é você que faz. Como fazer uma pelo painel e o que a rota do CSV deixa para trás.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":677,"title":678,"description":679,"published":680,"category":492,"image":681,"draft":496},"\u002Fblog\u002Fis-supabase-secure","O Supabase é seguro? É. Seu projeto é outra pergunta","O Supabase é seguro? A plataforma é auditada, criptografada e passa por pentests. A documentação deles diz onde isso termina e começam suas configurações.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":683,"title":684,"description":685,"published":686,"category":492,"image":687,"draft":496},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Onde ficam as chaves de API do Supabase: anon, service_role e URL","A URL do projeto, a chave anon e a chave service_role ficam todas numa página do painel. Aqui está onde ela fica, e qual dos quatro valores vai no seu app.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":689,"title":690,"description":691,"published":692,"category":492,"image":693,"draft":496},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy no Supabase. E agora?","\"New row violates row-level security policy\" significa que o Supabase recusou uma escrita. O conserto rápido reabre a tabela para qualquer um.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":695,"title":696,"description":697,"published":698,"category":492,"image":699,"draft":496},"\u002Fblog\u002Fcors-wildcard-security-risk","Um curinga CORS é um risco de segurança? Quase nunca.","Um curinga CORS é um risco de segurança? Em geral é o padrão do seu builder e não entrega nada que o seu servidor já não desse a qualquer um que pedisse.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":701,"title":702,"description":703,"published":704,"category":539,"image":705,"draft":496},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Branching do Supabase não é backup. Ele só anda para a frente.","Por que o branching do Supabase não é backup: um branch começa sem os seus dados e um merge só leva o esquema. Para que ele serve e o que usar no lugar.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":707,"title":708,"description":709,"published":710,"category":539,"image":711,"draft":496},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Como restaurar um backup do Supabase, e o que quebra depois","Como restaurar um backup do Supabase pelo painel ou por um arquivo de dump, o que a restauração substitui e por que o seu app pode continuar quebrado no fim.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":713,"title":714,"description":715,"published":716,"category":492,"image":717,"draft":496},"\u002Fblog\u002Fsupabase-storage-bucket-public","Seu bucket do Supabase Storage é público. Isso é um problema?","Um bucket público do Supabase Storage significa que quem tem a URL de um arquivo pode abri-lo. Não significa que alguém possa listar o que está lá dentro.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":719,"title":720,"description":721,"published":722,"category":492,"image":723,"draft":496},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Uma chave de API do Google no frontend é um problema?","Uma chave de API do Google exposta no seu frontend é a chave que nosso scanner mais encontra, e quase sempre está tudo bem. Um ajuste gratuito decide isso.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":725,"title":726,"description":727,"published":728,"category":539,"image":729,"draft":496},"\u002Fblog\u002Fai-agent-deleted-my-database","Um agente de IA apagou meus dados do Supabase. O que eu recupero?","Um agente de IA apagou dados do seu banco. O que você recupera já estava decidido antes de ele rodar, e os próximos minutos decidem o resto.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":311,"title":731,"description":732,"published":733,"category":492,"image":734,"draft":496},"Qualquer um consegue ler seu banco Supabase? Testamos 3.680 apps","Qualquer um consegue ler seu banco de dados Supabase sem fazer login? Escaneamos 30.998 apps no ar criadas com builders de IA e medimos quantas dizem que sim.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":253,"title":736,"description":737,"published":733,"category":492,"image":738,"draft":496},"Source maps expostos: seu app está publicando o código original","Um source map exposto deixa qualquer um ler o código original do seu app, comentários incluídos. A verificação de 30 segundos e o que importa de verdade.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":740,"title":741,"description":742,"published":743,"category":492,"image":744,"draft":496},"\u002Fblog\u002Fsupabase-new-api-keys","As novas chaves de API do Supabase: qual vai no seu app?","O Supabase trocou anon e service_role por chaves publicáveis e secretas. Qual delas pertence ao seu app e qual nunca deve estar lá?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":746,"title":747,"description":748,"published":749,"category":539,"image":750,"draft":496},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","O Supabase faz backup do meu banco de dados? Depende do plano.","O Supabase faz backup do seu banco de dados? Todo dia nos planos pagos, e nada no gratuito. Como descobrir o que você tem e o que essa cópia não cobre.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":752,"title":753,"description":754,"published":755,"category":492,"image":756,"draft":496},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","O Supabase Row Level Security está ligado. A tabela continua pública.","Ligar o Supabase Row Level Security não protege uma tabela. Quem protege são as políticas, e a que consertou o seu app pode deixar qualquer um entrar.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":758,"title":759,"description":760,"published":755,"category":539,"image":761,"draft":496},"\u002Fblog\u002Fversion-history-is-not-a-backup","O histórico de versões não é backup. Ele não desfaz um delete.","Lovable e Bolt guardam um histórico de versões do seu código. Seu banco de dados é um serviço à parte, e voltar atrás não traz os seus dados de volta.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":763,"title":764,"description":765,"published":766,"category":539,"image":767,"draft":496},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Três formas de fazer backup de um banco Supabase, e o que falta","O painel, o pg_dump e um serviço gerenciado. O que cada um salva de verdade, o que deixa de fora sem avisar e qual sobrevive a perder a conta.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":769,"title":770,"description":771,"published":766,"category":492,"image":772,"draft":496},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Quais chaves de API são seguras no navegador e quais não são","Sua chave anon do Supabase foi feita para ser pública. Sua chave service_role não, e ela ignora todas as regras que você criar. Como diferenciar as duas.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1790150954283]