[{"data":1,"prerenderedAt":819},["ShallowReactive",2],{"blog-pt-base44-security-scan":3,"blog-index-pt":464},{"id":4,"title":5,"body":6,"category":421,"cover":422,"coverAlt":423,"description":424,"draft":425,"extension":426,"faq":427,"image":443,"keywords":444,"meta":452,"navigation":453,"ogTitle":454,"path":455,"published":456,"seo":457,"stem":458,"tldr":459,"updated":456,"__hash__":463},"blog_pt\u002Fblog\u002Fbase44-security-scan.md","Scan de segurança do Base44: o que só ele enxerga",{"type":7,"value":8,"toc":409},"minimark",[9,13,21,24,29,32,127,139,161,165,168,171,178,184,193,197,200,226,233,238,241,249,257,261,264,267,272,275,279,282,296,302,313,317,320,330,348,358,375,378,382,402],[10,11,12],"p",{},"Você abre o Dashboard do seu app Base44, clica em Security, aperta Run Security\nScan e alguns segundos depois volta uma lista. Ou não volta nada. De um jeito ou\nde outro você está com um resultado na mão e se perguntando se aquilo era a\nverificação inteira.",[10,14,15,16,20],{},"A maioria dos textos sobre isso conta ao contrário. O argumento de sempre diz\nque um scan rodado de dentro do seu projeto não enxerga o que a internet\nenxerga, então o de fora é o confiável. No Base44 é o inverso na metade que\nimporta: ",[17,18,19],"strong",{},"o scan de segurança do Base44 é a única coisa capaz de verificar se\num estranho consegue ler seus dados, e nós conseguimos mostrar que não\nconseguimos."," Tentamos em 1.466 apps Base44 e obtivemos resposta de dois.",[10,22,23],{},"Então isto é uma divisão de trabalho. Um scan trabalha dentro do prédio. O outro\nfica na calçada e lê o que é entregue pela frente. Os dois valem a pena, e no\nBase44 o de dentro faz a metade mais pesada.",[25,26,28],"h2",{"id":27},"o-que-o-scan-de-segurança-do-base44-verifica","O que o scan de segurança do Base44 verifica?",[10,30,31],{},"Sete tipos de problema, lidos de dentro do seu projeto. Ele nunca busca seu\nendereço publicado.",[33,34,35,51],"table",{},[36,37,38],"thead",{},[39,40,41,45,48],"tr",{},[42,43,44],"th",{},"O que ele verifica",[42,46,47],{},"O que isso quer dizer",[42,49,50],{},"Planos",[52,53,54,66,76,86,96,106,117],"tbody",{},[39,55,56,60,63],{},[57,58,59],"td",{},"Data permission issues",[57,61,62],{},"Uma tabela de dados sem regras de acesso, ou pessoas com mais acesso do que deveriam ter",[57,64,65],{},"Todos",[39,67,68,71,74],{},[57,69,70],{},"Exposed secrets",[57,72,73],{},"Chaves de API, senhas ou tokens deixados num lugar que os visitantes do app alcançam",[57,75,65],{},[39,77,78,81,84],{},[57,79,80],{},"Unauthenticated backend functions",[57,82,83],{},"Algo nos bastidores entregando dados sem checar quem pergunta. Intitulado \"Anyone can run this function\"",[57,85,65],{},[39,87,88,91,94],{},[57,89,90],{},"Credit protection",[57,92,93],{},"Suas funções de IA, imagem ou e-mail alcançáveis de fora do seu app, de modo que outra pessoa gaste seus créditos",[57,95,65],{},[39,97,98,101,104],{},[57,99,100],{},"App dependencies",[57,102,103],{},"Uma biblioteca de terceiros com falha conhecida, junto da versão para a qual migrar",[57,105,65],{},[39,107,108,111,114],{},[57,109,110],{},"Code vulnerabilities",[57,112,113],{},"Padrões no seu próprio código: checagens de acesso que faltam, tratamento descuidado do que alguém digitou",[57,115,116],{},"A partir do Builder",[39,118,119,122,125],{},[57,120,121],{},"Security header recommendations",[57,123,124],{},"Duas proteções do navegador, a incorporação em iframe e os recursos do navegador que você não usa",[57,126,65],{},[10,128,129,130,134,135,138],{},"Tudo isso foi lido em 10 de outubro de 2026 na documentação do próprio Base44,\nnas páginas ",[131,132,133],"code",{},"Running a security scan"," e ",[131,136,137],{},"Base44 security: An overview",". Três\ncoisas de lá vale conhecer antes de confiar no resultado:",[140,141,142,149,155],"ul",{},[143,144,145,148],"li",{},[17,146,147],{},"O scan nunca aplica uma correção sozinho."," Você aperta Fix e o Base44\nescreve a mudança no chat de IA do seu app com um checkpoint antes dela, de\nmodo que uma correção que quebre algo pode ser desfeita a partir do chat.",[143,150,151,154],{},[17,152,153],{},"O botão Fix with AI numa função não autenticada rejeita qualquer chamada sem\nusuário logado."," O Base44 diz na mesma frase que isso pode quebrar uma página\nfeita para visitantes deslogados, um webhook ou uma integração que chame essa\nfunção. Teste esses caminhos depois.",[143,156,157,160],{},[17,158,159],{},"Ele avisa na publicação e não te impede."," O painel de publicação mostra um\nstatus de Security, e o Base44 o descreve como um aviso que não impede você de\npublicar.",[25,162,164],{"id":163},"o-que-só-ele-enxerga","O que só ele enxerga",[10,166,167],{},"Se as pessoas que usam seu app conseguem alcançar dados que não são delas. Num\napp Base44, nada fora da plataforma consegue verificar isso.",[10,169,170],{},"Na maioria dos builders seu app conversa com o banco de dados direto do\nnavegador do seu visitante. Com isso o banco tem um endereço público, sua página\ncarrega esse endereço e qualquer um pode tirá-lo dali e começar a perguntar. Se\nele recebe respostas depende de um ajuste tabela por tabela que a maioria dos\ndonos nunca abriu. Um app Base44 manda suas requisições pelo Base44, então não\nhá endereço nenhum na rua para alguém tentar.",[10,172,173,174,177],{},"A medição é desequilibrada o bastante para resolver a questão. 1.466 dos 5.442\napps Base44 que avaliamos citam um projeto Supabase em algum ponto da página.\nNossa verificação de Row Level Security obteve resposta utilizável de ",[17,175,176],{},"2","\ndeles. No Lovable, onde o banco responde direto à rua, responderam 3.553 de\n6.535. No Bolt, 35 de 267.",[179,180],"diagram",{"alt":181,"caption":182,"src":183},"Duas faixas. Na de cima uma lupa está dentro de um painel de plataforma lacrado, ao lado do banco de dados, e o alcança, com um visto. Na de baixo uma lupa de fora alcança a página do app, com visto, e uma linha tracejada partindo da mesma lupa em direção ao banco para na parede do painel, sob um ponto de interrogação.","Em cima o scan do Base44, trabalhando dentro da plataforma onde seus dados vivem. Embaixo um scan externo, que lê a página que seus visitantes baixam e para na parede.","\u002Fblog\u002Fbase44-security-scan\u002Fthe-two-halves-1600x680.png",[10,185,186,187,192],{},"Dois apps não são uma taxa e não vamos imprimir nenhuma. O que o número resolve\né quem pode olhar: num app Base44 as regras de acesso aos seus dados são legíveis\nna página Security do seu próprio painel e em nenhum outro lugar.\n",[188,189,191],"a",{"href":190},"\u002Fblog\u002Fis-base44-safe","O levantamento completo de como 5.442 apps Base44 pontuaram","\ntem os demais números.",[25,194,196],{"id":195},"por-que-seu-app-publicado-ainda-pode-estar-carregando-uma-chave","Por que seu app publicado ainda pode estar carregando uma chave",[10,198,199],{},"Porque o scan lê seu projeto e seus visitantes baixam um arquivo. Quatro coisas\nda documentação do próprio Base44 separam as duas:",[140,201,202,208,214,220],{},[143,203,204,207],{},[17,205,206],{},"A versão publicada pode ser mais antiga do que a que o scan leu."," O achado\nde credit protection do Base44 tem um estado exatamente para isso, e o aviso\ndiz \"Publish changes before protecting credits\" quando seu app no ar ainda\nroda uma versão anterior.",[143,209,210,213],{},[17,211,212],{},"O status na publicação é um aviso."," Risks found abre a página Security, e\nvocê pode publicar mesmo assim.",[143,215,216,219],{},[17,217,218],{},"Um achado que você ignora não volta."," Achados ignorados vão para uma seção\nprópria no fim da lista e, nas palavras do Base44, não reaparecem no scan\nseguinte. Uma lista limpa pode significar que alguém descartou o achado em\njunho.",[143,221,222,225],{},[17,223,224],{},"A metade do código precisa de um plano pago."," Code vulnerability scanning\nroda a partir do Builder, assim como a integração opcional com o Wiz, que\nacrescenta análise estática usando seu próprio tenant do Wiz.",[10,227,228,229,232],{},"Da calçada, essa diferença tem tamanho. Dos 5.442 apps Base44 que avaliamos,\n",[17,230,231],{},"95 serviam uma chave de API do Google na página",", 11 tinham algo com formato\nde senha ou de token, um tinha uma chave restrita do Stripe e outro uma chave\nsecreta do Stripe. A verificação de credenciais respondeu nos 5.442 apps, então\nsão contagens e não uma amostra.",[179,234],{"alt":235,"caption":236,"src":237},"Faixa de cima: uma janela de editor e ao lado um relatório com um visto. Faixa de baixo: uma página de app publicada com uma chave âmbar, alcançada por três visitantes na borda direita. Uma linha tracejada liga as duas faixas como duas versões de um mesmo app.","O scan lê a versão que está no seu editor. Seus visitantes baixam a que você publicou, e segundo o próprio achado de créditos do Base44 essa pode ser uma anterior.","\u002Fblog\u002Fbase44-security-scan\u002Fthe-publish-gap-1600x600.png",[10,239,240],{},"Esses 95 são uma fatia menor que a dos vizinhos, e vale dizer com clareza: na\nmesma varredura, 727 de 18.563 apps Lovable e 200 de 3.050 apps Replit\ncarregavam uma chave de API do Google. Nessa medição os apps Base44 estão mais\nquietos que os construídos ao lado.",[10,242,243,244,248],{},"É também o achado desta lista com mais chance de estar tudo bem. O Google emite\num único tipo de chave de API e espera vê-la no navegador; o que decide se um\nestranho consegue acumular uma fatura com ela é se você a restringiu ao seu\npróprio domínio, e essa restrição mora no console do Google, não no seu app.\n",[188,245,247],{"href":246},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","O que verificar numa chave do Google encontrada na sua própria página","\nsão os dois ajustes a ler.",[10,250,251,252,256],{},"Se você prefere ver a lista inteira do que seu app Base44 publicado entrega,\nnosso scan gratuito lê seu endereço no ar e relata o que consegue ver de fora.\nLeva cerca de 20 segundos e não pede conta:\n",[188,253,255],{"href":254},"\u002Fsecurity-scanner","escanear seu app de graça",".",[25,258,260],{"id":259},"a-verificação-dessa-lista-com-que-ninguém-conta","A verificação dessa lista com que ninguém conta",[10,262,263],{},"Alguém chamando as funções pagas do seu app direto, sem passar pelo seu app.",[10,265,266],{},"O Base44 chama isso de credit protection, e o achado aparece quando uma função\nsua que usa IA, geração de imagem ou e-mail é alcançável de fora do seu app. A\ndocumentação deles é direta sobre a consequência: quem a encontrar pode\nexecutá-la e gastar seus créditos de integração. Ela é classificada como High e,\ndependendo do seu app, a correção é um único botão Fix que restringe essas\nfunções sem mexer no seu próprio acesso, ou um Resolve with AI que move as\nchamadas para o seu backend.",[179,268],{"alt":269,"caption":270,"src":271},"Uma página de app no centro com uma seta de visitante entrando nela. Uma segunda seta, partindo de uma figura à esquerda, contorna a página e alcança diretamente um brilho e uma pilha de moedas atrás dela.","A rota de baixo é a de que o credit protection trata. A função é alcançável sem abrir seu app, e cada chamada gasta os mesmos créditos que as suas.","\u002Fblog\u002Fbase44-security-scan\u002Fcredits-from-outside-1600x560.png",[10,273,274],{},"Isso é do tipo que um scan de dentro faz bem e um de fora não tem como testar\nhonestamente. Descobrir se alguém consegue executar sua função de e-mail de\ngraça exigiria executá-la, então nosso scan deixa essa para o Base44 e relata o\nque consegue ler sem gastar nada que seja seu.",[25,276,278],{"id":277},"o-que-nenhum-dos-dois-scans-verifica","O que nenhum dos dois scans verifica",[10,280,281],{},"Três coisas, e a última é a única desta página que não dá para consertar depois.",[10,283,284,287,288,291,292,256],{},[17,285,286],{},"Seu certificado e seu domínio, se o app está no seu próprio endereço."," Um app\nBase44 num endereço ",[131,289,290],{},"base44.app"," herda os do Base44. Mude-o para um domínio que\nvocê comprou e as datas de renovação passam a ser suas, que é\n",[188,293,295],{"href":294},"\u002Fblog\u002Fdomain-and-certificate-expiry","o jeito mais silencioso de um app que funciona apagar",[10,297,298,301],{},[17,299,300],{},"Arquivos num bucket do Supabase Storage que você conectou."," Dos 1.466 apps\nBase44 que citam um projeto Supabase, nossa verificação de buckets conseguiu\nresponder em 5. A mesma parede que esconde o banco esconde o bucket, e a\nverificação de acessos do Base44 cobre as tabelas que ele gerencia, não um\nbucket num projeto que você mesmo conectou.",[10,303,304,307,308,312],{},[17,305,306],{},"Se existe uma cópia dos seus dados."," Isso nenhum scan de nenhum lado da\nparede verifica, porque não é uma propriedade do seu app. É uma propriedade do\nque você montou em outro lugar, e decide se uma migração que deu errado ou um\nagente com acesso ao banco termina numa restauração ou num e-mail para seus\nusuários.\n",[188,309,311],{"href":310},"\u002Fblog\u002Fai-agent-deleted-my-database","O dia em que um agente de IA apagou um banco de dados de produção","\nmostra como a segunda opção se lê.",[25,314,316],{"id":315},"manter-as-duas-metades-cobertas-depois-de-publicar","Manter as duas metades cobertas depois de publicar",[10,318,319],{},"Rode os dois de novo depois de qualquer mudança. Um resultado da semana passada\ndescreve o app da semana passada, e no Base44 publicar é um botão, então uma\ntabela criada hoje de manhã ou uma chave colada à meia-noite está no ar assim\nque você aperta.",[10,321,322],{},[17,323,324,325,329],{},"O ",[188,326,328],{"href":327},"\u002Fpricing","Reeve Monitor"," passa as nove verificações de fora de novo por\nvocê:",[140,331,332,335,338,345],{},[143,333,334],{},"as nove verificações a cada hora, em até três apps",[143,336,337],{},"se o app responde, a cada 60 segundos",[143,339,340,341,344],{},"uma mensagem quando um resultado ",[17,342,343],{},"muda",", para que um achado novo não espere você olhar",[143,346,347],{},"um relatório mensal do que foi visto",[10,349,350],{},[17,351,352,353,357],{},"Se o seu app Base44 guarda os dados no seu próprio projeto Supabase, o\n",[188,354,356],{"href":355},"\u002Fsupabase-backups","Reeve Care"," mantém uma cópia deles:",[140,359,360,363,366,369,372],{},[143,361,362],{},"uma cópia criptografada do seu banco Supabase toda noite, guardada onde seu projeto não alcança",[143,364,365],{},"cada cópia verificada antes de contar, contando as linhas de cada tabela",[143,367,368],{},"uma restauração em um clique quando você precisar",[143,370,371],{},"seus arquivos enviados também, assim que você conectar uma credencial de Storage",[143,373,374],{},"tudo o que o Monitor faz",[10,376,377],{},"Os dois estão na página de preços, que às vezes está abaixo do valor de tabela\ndaqui e nunca acima.",[25,379,381],{"id":380},"o-que-fazer-hoje","O que fazer hoje",[383,384,385],"key-takeaways",{},[140,386,387,390,393,396,399],{},[143,388,389],{},"Rode o scan em Dashboard → Security antes da próxima publicação e leia os achados antes de apertar Fix all issues. A correção de uma função não autenticada pode trancar uma página que você queria aberta.",[143,391,392],{},"Olhe a seção Ignored no fim da lista. Um achado que alguém ignorou meses atrás continua ignorado hoje.",[143,394,395],{},"Se seu app gasta créditos de integração com IA, imagens ou e-mail, leia primeiro o achado de credit protection. É o da lista que custa dinheiro sozinho.",[143,397,398],{},"Escaneie depois o endereço publicado por fora, porque o app no ar pode ser uma versão anterior à que o scan leu.",[143,400,401],{},"Guarde uma cópia dos seus dados onde seu app não alcança, se você conectou seu próprio projeto Supabase. Nenhum dos dois scans consegue dizer se ela existe.",[10,403,404,405,256],{},"Comece pela seção Ignored, leva segundos e é o único lugar em que um relatório\nlimpo pode estar escondendo um achado de verdade. Se quiser a versão em\nlinguagem simples de tudo o que dá para verificar de fora num app Base44, temos\n",[188,406,408],{"href":407},"\u002Fis-your-base44-app-safe","um guia para apps Base44",{"title":410,"searchDepth":411,"depth":411,"links":412},"",3,[413,415,416,417,418,419,420],{"id":27,"depth":414,"text":28},2,{"id":163,"depth":414,"text":164},{"id":195,"depth":414,"text":196},{"id":259,"depth":414,"text":260},{"id":277,"depth":414,"text":278},{"id":315,"depth":414,"text":316},{"id":380,"depth":414,"text":381},"Noções de segurança","\u002Fblog\u002Fbase44-security-scan\u002Fcover-1200x630.png","Um painel de plataforma lacrado com um banco de dados e uma lupa dentro, e à frente uma página de app entregando uma cópia aos visitantes na borda do quadro.","O scan de segurança do Base44 verifica sete tipos de problema por dentro. Esta é a metade que ele lê e mais ninguém, e a metade que ele nunca olha.",false,"md",[428,431,434,437,440],{"q":429,"a":430},"O Base44 verifica meu app em busca de problemas de segurança?","Sim. Abra o editor do seu app, clique em Dashboard, depois em Security e depois em Run Security Scan. Ele verifica sete tipos de problema: as regras de acesso aos seus dados, credenciais expostas, funções de backend que respondem sem checar quem está perguntando, funções que gastam seus créditos de integração, bibliotecas de terceiros com falhas conhecidas, padrões no seu próprio código e dois cabeçalhos de segurança do navegador. Cada achado vem com uma correção sugerida que você pode aplicar, e o scan não aplica nenhuma por conta própria. Está incluído em todos os planos, inclusive no gratuito, mas a metade que lê o código só roda a partir do Builder. Lido em 10 de outubro de 2026.",{"q":432,"a":433},"O scan de segurança do Base44 é suficiente?","Ele é o único scan capaz de verificar a parte mais importante de um app Base44, porque seus dados ficam atrás do Base44 e não num endereço público. O que ele não tem motivo para fazer é buscar sua página publicada e ler o que saiu nela. Avaliamos 5.442 apps Base44 no ar: a pergunta sobre o banco de dados teve resposta em 2 deles, e 95 serviam uma chave de API do Google na página. Rode o scan de dentro antes de publicar e um de fora depois.",{"q":435,"a":436},"Por que um scanner externo não consegue verificar meu banco de dados do Base44?","Porque não há nada na rua em que bater. Na maioria dos builders seu app conversa com o banco de dados direto do navegador do visitante, então o banco tem um endereço público, sua página carrega esse endereço e qualquer um pode tirá-lo dali e fazer perguntas. Um app Base44 manda suas requisições pelo Base44. Dos 1.466 apps Base44 que avaliamos e que citam um projeto Supabase em algum ponto da página, nossa verificação de Row Level Security obteve resposta utilizável de 2. No Lovable, onde o banco responde direto à rua, responderam 3.553 de 6.535.",{"q":438,"a":439},"O que um scan externo encontra que o Base44 não encontra?","O que seus visitantes recebem agora. O Base44 lê o projeto que está no seu editor, e quatro coisas da documentação deles separam isso do app no ar: a versão publicada pode ser mais antiga do que a que o scan leu, o scan avisa na publicação sem bloqueá-la, um achado ignorado uma vez não volta, e a análise do código precisa do plano Builder. Nos 5.442 apps Base44 que avaliamos, 95 tinham uma chave de API do Google na página, 11 tinham algo com formato de senha ou de token, um tinha uma chave restrita do Stripe e outro uma chave secreta do Stripe.",{"q":441,"a":442},"Devo rodar os dois?","Eles respondem a metades diferentes, então um não substitui o outro. Rode o scan do Base44 na página Security antes de publicar, leia os achados antes de apertar Fix all issues e depois verifique o endereço publicado por fora. Um scan externo leva cerca de 20 segundos e não pede conta.","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",[445,446,447,448,449,450,451],"scan de seguranca base44","base44 security scan","base44 verifica seguranca","verificar seguranca de app base44","painel de seguranca base44","base44 verificacao rls","auditoria de seguranca base44",{},true,"Scan de segurança do Base44: o que só ele vê","\u002Fblog\u002Fbase44-security-scan","2026-10-10",{"title":5,"description":424},"blog\u002Fbase44-security-scan",[460,461,462],"O scan de segurança do Base44 roda por dentro do seu projeto e verifica sete tipos de problema, das regras de acesso aos seus dados até as bibliotecas de que o app depende. Está incluído em todos os planos, e uma das sete verificações só roda a partir do Builder.","Num app Base44 ele é o único scan capaz de responder ao que as pessoas realmente querem dizer com \"meu app está seguro\": se um estranho consegue ler seus dados. Avaliamos 5.442 apps Base44 no ar e conseguimos perguntar a 2.","O que ele não tem motivo para ler é a página que seus visitantes baixam. Em 95 desses 5.442 apps havia ali uma chave de API do Google.","t-be48h2RiRqhUrVU2iqaapficxyYMjm7csh1_I1Li8",[465,471,472,478,484,490,495,501,507,513,519,525,531,537,544,550,556,561,567,573,579,584,590,596,602,608,614,620,626,632,638,644,650,656,662,668,674,680,686,692,698,704,710,716,722,728,734,740,746,752,758,764,769,774,780,785,791,797,803,808,814],{"path":466,"title":467,"description":468,"published":469,"category":421,"image":470,"draft":425},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" ao enviar","\"New row violates row-level security policy for table objects\" quer dizer que o seu envio não tem regra insert. Deixar o bucket público não cria nenhuma.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":455,"title":5,"description":424,"published":456,"category":421,"image":443,"draft":425},{"path":473,"title":474,"description":475,"published":476,"category":421,"image":477,"draft":425},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Sua chave de API vazou. A ordem em que agir","Uma chave de API vazou e você não sabe o que fazer primeiro. Nem toda chave no seu frontend é um vazamento, e a ordem importa mais que a pressa.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":479,"title":480,"description":481,"published":482,"category":421,"image":483,"draft":425},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" sem desligar o RLS","\"Infinite recursion detected in policy for relation\" significa que a sua policy perguntou à tabela que ela protege. Veja como quebrar o círculo.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":485,"title":486,"description":487,"published":488,"category":421,"image":489,"draft":425},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" no Supabase, e a correção errada","\"No API key found in request\" significa que sua requisição chegou ao Supabase sem chave. Quase toda resposta aponta para as regras do seu banco.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":190,"title":491,"description":492,"published":493,"category":421,"image":494,"draft":425},"O Base44 é seguro? O que vimos em 5.442 apps Base44","O Base44 é seguro? Rodamos nove verificações em 5.442 apps Base44 no ar. Quase todas tiraram B por motivos que o dono nunca escolheu.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":496,"title":497,"description":498,"published":499,"category":421,"image":500,"draft":425},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Esconder uma chave de API: mova para uma Edge Function do Supabase","Esconder uma chave de API é tirá-la do navegador, e uma Edge Function do Supabase é o menor lugar para guardá-la. Dois passos em volta pesam mais.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":502,"title":503,"description":504,"published":505,"category":421,"image":506,"draft":425},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Seu arquivo .env está exposto? Os doze caminhos para testar","Seu arquivo .env está exposto no seu próprio servidor web? Doze endereços dizem isso em um minuto, e um acerto significa que tudo nele já é público.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":508,"title":509,"description":510,"published":511,"category":421,"image":512,"draft":425},"\u002Fblog\u002Fis-v0-safe","Segurança do v0: os 1.790 aplicativos v0 escaneados tiraram A","A segurança do v0 medida em 1.790 aplicativos v0 no ar: todos tiraram A. Só 17 citavam um banco de dados, e é sobretudo isso que esse A mede.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":514,"title":515,"description":516,"published":517,"category":421,"image":518,"draft":425},"\u002Fblog\u002Fis-bolt-safe","O Bolt é seguro? O que vimos em 1.123 aplicativos Bolt","O Bolt é seguro? Passamos 1.123 aplicativos Bolt no ar por nove verificações. A hospedagem saiu limpa. Os achados: chaves e tabelas abertas nos aplicativos.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":520,"title":521,"description":522,"published":523,"category":421,"image":524,"draft":425},"\u002Fblog\u002Fis-supabase-down-or-your-app","O Supabase caiu ou o problema é o seu app? Como saber","O Supabase caiu ou o problema é o seu app? Um projeto pausado, um banco cheio e um erro seu parecem iguais. Quatro verificações separam os casos.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":526,"title":527,"description":528,"published":529,"category":421,"image":530,"draft":425},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","O Supabase criptografa meus dados? Sim. Veja o que isso impede","O Supabase criptografa os dados? Sim: AES-256 em repouso, TLS em trânsito, SOC 2 e ISO 27001. O que cada um cobre, e o vazamento que nenhum deles impede.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":532,"title":533,"description":534,"published":535,"category":421,"image":536,"draft":425},"\u002Fblog\u002Fsupabase-free-plan-limits","Quanto custa o Supabase? Os limites do plano gratuito","Quanto custa o Supabase: o plano gratuito tem 500 MB de banco, 5 GB de egress e nenhum backup. O que acontece em cada limite e o que o Pro de $25 muda.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":538,"title":539,"description":540,"published":541,"category":542,"image":543,"draft":425},"\u002Fblog\u002Ftest-your-supabase-backup","Teste o backup do seu Supabase antes do dia em que precisar","Como testar o backup do seu Supabase: restaurar num projeto de teste, contar as linhas, entrar e procurar a linha que falta num arquivo cortado.","2026-09-28","Backups","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":545,"title":546,"description":547,"published":548,"category":542,"image":549,"draft":425},"\u002Fblog\u002Fsupabase-backup-github-action","Backup grátis do Supabase com uma GitHub Action, e a pegadinha","Um backup do Supabase com GitHub Action é grátis e serve para muitos apps. O workflow, a connection string certa e o egress de cada execução.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":551,"title":552,"description":553,"published":554,"category":542,"image":555,"draft":425},"\u002Fblog\u002Fdownload-your-supabase-backup","Por que você não consegue baixar seu backup do Supabase","Você não consegue baixar seu backup do Supabase num projeto atual, porque a cópia diária é um snapshot físico. Como conferir e como ter uma cópia só sua.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":557,"title":558,"description":559,"published":554,"category":421,"image":560,"draft":425},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": o grant que falta","A partir de 30 de outubro, uma tabela nova no Supabase responde \"permission denied for table\" até receber um grant. O e-mail mostra só metade.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":562,"title":563,"description":564,"published":565,"category":421,"image":566,"draft":425},"\u002Fblog\u002Fopen-api-endpoint-exposed","Um endpoint de API aberto é um problema? Leia o JSON","Seu scan apontou um endpoint de API aberto. Se isso importa depende do que voltou, e a maioria dos que encontramos era da própria plataforma.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":568,"title":569,"description":570,"published":571,"category":421,"image":572,"draft":425},"\u002Fblog\u002Flovable-security-scan","Escaneamento de segurança do Lovable: o que ele não prova","Escaneamento de segurança do Lovable: o que o Quick scan e o Deep scan checam, quando cada um roda, e a única coisa que nenhum escaneamento por dentro prova.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":574,"title":575,"description":576,"published":577,"category":542,"image":578,"draft":425},"\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","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":294,"title":580,"description":581,"published":582,"category":421,"image":583,"draft":425},"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":585,"title":586,"description":587,"published":588,"category":421,"image":589,"draft":425},"\u002Fblog\u002Fis-lovable-safe","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.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":591,"title":592,"description":593,"published":594,"category":421,"image":595,"draft":425},"\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":597,"title":598,"description":599,"published":600,"category":421,"image":601,"draft":425},"\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":603,"title":604,"description":605,"published":606,"category":421,"image":607,"draft":425},"\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":609,"title":610,"description":611,"published":612,"category":421,"image":613,"draft":425},"\u002Fblog\u002Fbase44-source-maps","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":615,"title":616,"description":617,"published":618,"category":421,"image":619,"draft":425},"\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":621,"title":622,"description":623,"published":624,"category":421,"image":625,"draft":425},"\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":627,"title":628,"description":629,"published":630,"category":542,"image":631,"draft":425},"\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":633,"title":634,"description":635,"published":636,"category":542,"image":637,"draft":425},"\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":639,"title":640,"description":641,"published":642,"category":542,"image":643,"draft":425},"\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":645,"title":646,"description":647,"published":648,"category":421,"image":649,"draft":425},"\u002Fblog\u002Fsafest-ai-app-builder","Qual builder de apps com IA é mais seguro? 30.998 apps testados","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.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":651,"title":652,"description":653,"published":654,"category":421,"image":655,"draft":425},"\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":657,"title":658,"description":659,"published":660,"category":421,"image":661,"draft":425},"\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":663,"title":664,"description":665,"published":666,"category":421,"image":667,"draft":425},"\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":669,"title":670,"description":671,"published":672,"category":421,"image":673,"draft":425},"\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":675,"title":676,"description":677,"published":678,"category":421,"image":679,"draft":425},"\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":681,"title":682,"description":683,"published":684,"category":421,"image":685,"draft":425},"\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":687,"title":688,"description":689,"published":690,"category":421,"image":691,"draft":425},"\u002Fblog\u002Fmissing-security-headers","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":693,"title":694,"description":695,"published":696,"category":421,"image":697,"draft":425},"\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":699,"title":700,"description":701,"published":702,"category":421,"image":703,"draft":425},"\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":705,"title":706,"description":707,"published":708,"category":542,"image":709,"draft":425},"\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":711,"title":712,"description":713,"published":714,"category":421,"image":715,"draft":425},"\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":717,"title":718,"description":719,"published":720,"category":542,"image":721,"draft":425},"\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":723,"title":724,"description":725,"published":726,"category":421,"image":727,"draft":425},"\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":729,"title":730,"description":731,"published":732,"category":421,"image":733,"draft":425},"\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":735,"title":736,"description":737,"published":738,"category":421,"image":739,"draft":425},"\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":741,"title":742,"description":743,"published":744,"category":421,"image":745,"draft":425},"\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":747,"title":748,"description":749,"published":750,"category":542,"image":751,"draft":425},"\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":753,"title":754,"description":755,"published":756,"category":542,"image":757,"draft":425},"\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":759,"title":760,"description":761,"published":762,"category":421,"image":763,"draft":425},"\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":246,"title":765,"description":766,"published":767,"category":421,"image":768,"draft":425},"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":310,"title":770,"description":771,"published":772,"category":542,"image":773,"draft":425},"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":775,"title":776,"description":777,"published":778,"category":421,"image":779,"draft":425},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","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":781,"title":782,"description":783,"published":778,"category":421,"image":784,"draft":425},"\u002Fblog\u002Fsource-maps-exposed-in-production","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":786,"title":787,"description":788,"published":789,"category":421,"image":790,"draft":425},"\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":792,"title":793,"description":794,"published":795,"category":542,"image":796,"draft":425},"\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":798,"title":799,"description":800,"published":801,"category":421,"image":802,"draft":425},"\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":804,"title":805,"description":806,"published":801,"category":542,"image":807,"draft":425},"\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":809,"title":810,"description":811,"published":812,"category":542,"image":813,"draft":425},"\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":815,"title":816,"description":817,"published":812,"category":421,"image":818,"draft":425},"\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",1791705963223]