[{"data":1,"prerenderedAt":865},["ShallowReactive",2],{"blog-pt-lovable-security-scan":3,"blog-index-pt":518},{"id":4,"title":5,"body":6,"category":474,"cover":475,"coverAlt":476,"description":477,"draft":478,"extension":479,"faq":480,"image":495,"keywords":496,"meta":506,"navigation":507,"ogTitle":508,"path":509,"published":510,"seo":511,"stem":512,"tldr":513,"updated":510,"__hash__":517},"blog_pt\u002Fblog\u002Flovable-security-scan.md","Escaneamento de segurança do Lovable: o que ele não prova",{"type":7,"value":8,"toc":460},"minimark",[9,13,21,26,29,40,55,61,65,68,71,86,89,93,96,99,102,114,118,121,124,130,137,141,144,147,165,172,177,188,191,199,203,206,225,228,330,337,341,344,372,375,380,391,395,398,401,408,420,424,452],[10,11,12],"p",{},"Você clica em Publish no seu aplicativo Lovable e, antes de ele sair, um\nescaneamento roda. Alguns segundos depois ele volta limpo, ou volta com uma\nlista, e nos dois casos você está com um resultado que não tem como julgar. É só\nisso? Dá para colocar gente de verdade em cima?",[10,14,15,16,20],{},"E esta é a parte que vale saber antes de decidir: ",[17,18,19],"strong",{},"o escaneamento de segurança\ndo Lovable e um escaneamento do seu aplicativo publicado leem dois objetos\ndiferentes."," Um lê as fechaduras e a fiação. O outro chega perto e abaixa a\nmaçaneta. Os dois valem, e só o segundo faz o que cada visitante do seu\naplicativo faz o dia inteiro.",[22,23,25],"h2",{"id":24},"o-lovable-verifica-meu-aplicativo-em-busca-de-problemas-de-segurança","O Lovable verifica meu aplicativo em busca de problemas de segurança?",[10,27,28],{},"Sim, e são dois. Os dois são gratuitos.",[10,30,31,32,35,36,39],{},"O ",[17,33,34],{},"Quick scan"," roda sozinho toda vez que você publica e termina em segundos. O\n",[17,37,38],{},"Deep scan"," lê todo o código do seu aplicativo e você mesmo dispara. Os dois\nleem o seu projeto por dentro: as configurações do seu banco, as regras de\nacesso nas suas tabelas, a sua árvore de dependências, o seu código.",[10,41,42,43,50,51,54],{},"Tudo o que vem abaixo foi lido na\n",[44,45,49],"a",{"href":46,"rel":47},"https:\u002F\u002Fdocs.lovable.dev\u002Ffeatures\u002Fsecurity",[48],"nofollow","documentação de segurança do próprio Lovable","\nem ",[17,52,53],{},"24 de setembro de 2026",". Esse recurso mudou mais de uma vez em um ano,\nentão olhe a data de qualquer artigo que descreva ele, este incluído.",[56,57],"diagram",{"alt":58,"caption":59,"src":60},"Dois painéis. No da esquerda, uma caixa contém em fila um banco de dados, um documento, um sinal de código e uma pilha de linhas, e abaixo deles uma lupa grande fica dentro da caixa. No da direita, uma página publicada manda uma seta para um banco de dados que fica fora dela, três visitantes esperam do outro lado, e uma lupa do mesmo tamanho fica ao ar livre no meio deles.","Dois escaneamentos, dois lugares para ficar. O que está dentro da caixa consegue abrir qualquer coisa do projeto. O que está na rua só consegue perguntar ao aplicativo o que ele entrega, que é exatamente o que as três pessoas ao lado dele estão fazendo.","\u002Fblog\u002Flovable-security-scan\u002Ftwo-vantage-points-1600x700.png",[22,62,64],{"id":63},"o-que-o-escaneamento-de-segurança-do-lovable-checa","O que o escaneamento de segurança do Lovable checa",[10,66,67],{},"Três áreas, como um conjunto fixo de verificações, em segundos, a cada\npublicação.",[10,69,70],{},"A documentação do Lovable chama elas de revisão do banco de dados, auditoria de\ndependências e verificação de servidor MCP. A revisão do banco é a que importa\nneste artigo, e a descrição dela merece uma leitura devagar: cobre tabelas sem\ncontrole de acesso por registro, ou seja, sem Row Level Security, além de regras\nde acesso que deixam todo mundo passar e a proteção contra senhas vazadas\ndesligada. A auditoria de dependências procura vulnerabilidades conhecidas nos\nseus pacotes npm. A verificação de MCP procura um servidor MCP que o seu\naplicativo exponha sem autenticação.",[10,72,73,74,77,78,81,82,85],{},"Os achados voltam agrupados por área e rotulados como ",[17,75,76],{},"Critical",", ",[17,79,80],{},"Warning","\nou ",[17,83,84],{},"Info",". O escaneamento dispara automaticamente pela caixa de publicação, e\nvocê também pode iniciar ele na visão Security do projeto.",[10,87,88],{},"Alguns textos chamam isso de Basic scan. O botão na visão Security hoje diz Run\nquick scan, então se um artigo e a sua tela discordarem sobre o nome, a sua tela\né a atual.",[22,90,92],{"id":91},"o-que-o-deep-scan-acrescenta","O que o Deep scan acrescenta",[10,94,95],{},"Ele lê todo o código do seu aplicativo, e não se dispara sozinho.",[10,97,98],{},"O Deep scan inclui tudo do Quick scan e depois olha a sua própria lógica, as\nsuas permissões e os seus dados. O Lovable lista sete áreas: controle de acesso\ne autorização, endpoints sem autenticação e passíveis de abuso, entrada insegura\ne injeção, segredos e credenciais vazados, pagamentos e cobrança, autenticação e\nsegurança de contas, e dados pessoais e sensíveis expostos. Ele também é\ngratuito.",[10,100,101],{},"A frase da documentação para agir de verdade é esta: o Deep scan não roda\nautomaticamente enquanto você trabalha. Ele roda quando você roda. Um projeto em\nque nunca dispararam um nunca teve o código lido, por mais vezes que tenha sido\npublicado, e a caixa de publicação não vai te contar isso. Espaços de trabalho\nEnterprise podem agendar Deep scans em projetos escolhidos pelo Workspace\nSecurity center, e essa é a única configuração em que isso acontece sem alguém\nlembrar.",[10,103,104,105,108,109,113],{},"O Lovable também pode tentar correções, enquanto você constrói ou pelo ",[17,106,107],{},"Try to\nfix all"," na visão Security. Leia o que uma correção mudou antes de aceitar. O\nconserto que faz um erro de row level security sumir é muito seguidamente uma\npolítica que deixa todo mundo passar, e essa política\n",[44,110,112],{"href":111},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","cumpre a verificação e deixa a tabela aberta",".",[22,115,117],{"id":116},"a-crítica-de-2025-e-o-que-mudou","A crítica de 2025, e o que mudou",[10,119,120],{},"A primeira versão dessa verificação dizia que uma política existia. Ela não\ndizia se a política funcionava, e o pesquisador que achou o problema original\nescreveu isso ele mesmo na época.",[10,122,123],{},"Em maio de 2025 Matt Palmer publicou a CVE-2025-48757, sobre aplicativos Lovable\ncujas tabelas Supabase estavam sem row level security ou com ele escrito de\nforma larga demais. A resposta do Lovable foi a verificação antes de publicar. O\npróprio texto de Palmer descreveu o limite dela num parêntese:",[125,126,127],"blockquote",{},[10,128,129],{},"O recurso Publish do Lovable ajuda a garantir que as políticas de RLS estejam\nativadas em todas as tabelas e avisa quando não estão (mas não indica\nnecessariamente se elas são suficientes).",[10,131,132,133,113],{},"Essa lacuna tem resposta na documentação atual, que nomeia as regras de acesso\nque deixam todo mundo passar como algo que a revisão do banco sinaliza. Nada\nneste artigo testa essa afirmação. Se você quiser testar, crie uma tabela\ndescartável com uma política que deixa todo mundo passar e veja se o\nescaneamento nomeia ela. A versão longa da CVE está em\n",[44,134,136],{"href":135},"\u002Fblog\u002Fis-lovable-safe","o Lovable é seguro",[22,138,140],{"id":139},"o-que-um-escaneamento-por-dentro-não-prova","O que um escaneamento por dentro não prova",[10,142,143],{},"Se o seu aplicativo no ar entrega linhas para alguém que não fez login.",[10,145,146],{},"Uma fechadura pode estar instalada, registrada e correta na planta, e a porta\nabrir do mesmo jeito. Uma política é uma declaração sobre o que deveria\nacontecer; o que decide o que acontece é uma requisição. Três jeitos de uma\nregra constar como presente e a tabela responder assim mesmo:",[148,149,150,159,162],"ul",{},[151,152,153,154,158],"li",{},"A política deixa todo mundo passar. Escrita como ",[155,156,157],"code",{},"using (true)",", é uma\npolítica válida, cumpre a exigência de que exista uma, e devolve toda linha\npara todo chamador.",[151,160,161],{},"A política cobre a leitura e mais nada. O select é verificado, o insert, o\nupdate e o delete nunca foram escritos, então qualquer um consegue escrever\nnuma tabela que ninguém consegue ler inteira.",[151,163,164],{},"A condição bate com mais gente do que deveria. Ela tinha que nomear um cliente\nsó e nomeia todo visitante logado, ou todo visitante.",[10,166,167,168,171],{},"Agora a parte que decide como você deveria ler um resultado verde. ",[17,169,170],{},"De fora,\nesses três e uma tabela sem proteção nenhuma dão a mesma resposta",", que são\nlinhas. Os seus usuários não distinguem. Ninguém mais que abrir o seu aplicativo\ndistingue também.",[56,173],{"alt":174,"caption":175,"src":176},"Uma corrente da esquerda para a direita: uma pessoa, uma seta para uma página publicada, uma seta para um banco de dados e uma seta vermelha para um painel com três linhas de dados. Nenhuma chave e nenhum cadeado aparece ao longo da linha. Abaixo da página, desenhada apagada e ligada a nada, fica uma caixa de projeto com um banco de dados, um documento, um sinal de código e uma pilha de linhas.","A requisição que decide, e as linhas com que ela voltou. O projeto fica embaixo da página e não encosta na linha em ponto nenhum, e é por isso que nada dentro dele responde pelo que aconteceu aqui.","\u002Fblog\u002Flovable-security-scan\u002Fthe-request-that-decides-1600x560.png",[10,178,179,180,183,184,113],{},"Entre 12 e 14 de agosto de 2026 passamos as mesmas nove verificações externas em\n30.998 aplicativos no ar, e 18.554 deles estavam publicados no Lovable. Dos\naplicativos Lovable que nomeavam um projeto Supabase, 3.553 nos responderam com\nclareza suficiente para julgar, e ",[17,181,182],{},"2.017 deles devolveram linhas para uma\nrequisição que não levava login nenhum",". O método e cada denominador estão\n",[44,185,187],{"href":186},"\u002Fresearch\u002Fvibe-coded-app-security-2026","no relatório",[10,189,190],{},"Uma ressalva honesta sobre esse número. Nós estávamos na calçada, e não temos\nvista nenhuma para dentro desses projetos. Podemos relatar o que 2.017\naplicativos publicados responderam. Não podemos relatar quantos deles tinham\nrodado um escaneamento, nem o que ele disse a eles.",[10,192,193,194,198],{},"O seu próprio aplicativo responde à mesma pergunta em uns 20 segundos, e você\nnão precisa acreditar na nossa palavra sobre de que lado dos 2.017 ele cai:\n",[44,195,197],{"href":196},"\u002Fsecurity-scanner","escanear seu aplicativo",". O escaneamento pergunta a cada\ntabela quantas linhas um chamador sem login receberia, lê o número e para por\naí, sem puxar uma linha sequer.",[22,200,202],{"id":201},"o-que-um-escaneamento-de-fora-não-enxerga","O que um escaneamento de fora não enxerga",[10,204,205],{},"Abaixar a maçaneta não te diz nada sobre um cômodo sem porta para a rua, e\nexistem quatro desses.",[10,207,208,209,212,213,216,217,220,221,224],{},"A sua ",[17,210,211],{},"árvore de dependências npm"," não está na página que um navegador baixa.\nO seu ",[17,214,215],{},"código de servidor",", incluindo edge functions e se uma rota confere\nquem está chamando, roda num lugar que nunca alcançamos. Uma ",[17,218,219],{},"tabela que o seu\nfront-end nunca nomeia"," é invisível para nós, porque achamos nomes de tabela no\ncódigo que o seu aplicativo entrega mais uma lista curta de nomes comuns, então\numa tabela que não aparece em lugar nenhum do navegador e que ninguém\nadivinharia não chega a ser perguntada. E um ",[17,222,223],{},"servidor MCP"," não é algo que uma\nrequisição de página encontre.",[10,226,227],{},"Os dois escaneamentos do Lovable juntos leem os quatro. O nosso escreve \"Não foi\npossível verificar\" quando não conseguiu responder uma pergunta, em vez de uma\nmarca de certo.",[229,230,231,247],"table",{},[232,233,234],"thead",{},[235,236,237,241,244],"tr",{},[238,239,240],"th",{},"Do que se trata",[238,242,243],{},"Escaneamento do Lovable, dentro",[238,245,246],{},"Um escaneamento de fora",[248,249,250,262,273,284,293,302,311,320],"tbody",{},[235,251,252,256,259],{},[253,254,255],"td",{},"Row level security desligado numa tabela",[253,257,258],{},"Sim",[253,260,261],{},"Só pelo efeito",[235,263,264,267,270],{},[253,265,266],{},"Uma política que deixa todo mundo passar",[253,268,269],{},"Sim, segundo a documentação",[253,271,272],{},"Sim, pelas linhas",[235,274,275,278,281],{},[253,276,277],{},"O que o seu aplicativo publicado entrega a um estranho",[253,279,280],{},"Não",[253,282,283],{},"Sim, é o trabalho todo",[235,285,286,289,291],{},[253,287,288],{},"As suas dependências npm",[253,290,258],{},[253,292,280],{},[235,294,295,298,300],{},[253,296,297],{},"Código de servidor e autenticação de edge functions",[253,299,258],{},[253,301,280],{},[235,303,304,307,309],{},[253,305,306],{},"Uma tabela que o seu front-end nunca nomeia",[253,308,258],{},[253,310,280],{},[235,312,313,316,318],{},[253,314,315],{},"Qual chave foi parar no código que os visitantes baixam",[253,317,258],{},[253,319,258],{},[235,321,322,325,328],{},[253,323,324],{},"Data do certificado, data do domínio e cabeçalhos",[253,326,327],{},"Não está na lista dele",[253,329,258],{},[10,331,332,333,113],{},"A linha sobre o que o seu aplicativo publicado entrega a um estranho é o motivo\npara rodar os dois, e é a linha em volta da qual o nosso escaneamento foi\nconstruído. A versão geral de onde a vista de fora termina está em\n",[44,334,336],{"href":335},"\u002Fblog\u002Fvibe-coding-security-scanner","o que um escaneamento por URL não pega",[22,338,340],{"id":339},"os-dois-e-nesta-ordem","Os dois, e nesta ordem",[10,342,343],{},"O escaneamento por dentro antes de publicar, o de fora depois, porque essa é a\nordem em que as duas coisas acontecem.",[345,346,347,353,359,364],"ol",{},[151,348,349,352],{},[17,350,351],{},"Deixe o Quick scan rodar na publicação e depois leia."," São alguns\nsegundos, e vai acontecer de qualquer jeito. Passar direto pela caixa é o\njeito mais comum de um achado Critical chegar em produção.",[151,354,355,358],{},[17,356,357],{},"Dispare um Deep scan antes de qualquer coisa real ir ao ar",", e de novo\ndepois de acrescentar login, pagamentos ou qualquer tabela que guarde\npessoas. Sozinho ele não roda.",[151,360,361],{},[17,362,363],{},"Publique.",[151,365,366,369,370,113],{},[17,367,368],{},"Escaneie o endereço publicado de fora."," O nosso lê o seu aplicativo no ar\ndo jeito que um visitante lê, leva uns 20 segundos, não precisa de conta e\nnomeia as verificações que não conseguiu terminar:\n",[44,371,197],{"href":196},[10,373,374],{},"Nessa sequência existe uma brecha, e é com ela que vale planejar. O Quick scan\nroda quando você publica. A maior parte do que abre uma tabela não passa pela\npublicação: você muda uma configuração no painel do Supabase, aceita à\nmeia-noite uma política que um assistente escreveu numa janela de chat, cria uma\ntabela hoje de manhã e a tela que lê ela sai na quinta. Nada disso é uma\npublicação, então nada disso dispara um escaneamento, e o Deep scan nunca ia\nrodar sozinho de qualquer forma.",[56,376],{"alt":377,"caption":378,"src":379},"Uma linha do tempo horizontal com três pontos turquesa, cada um ligado para cima a uma lupa dentro de um círculo. Entre o segundo e o terceiro há um ponto âmbar ligado para baixo a um interruptor de configuração, e a partir dali a linha vira âmbar até o fim, passando reta por baixo da terceira lupa.","Toda publicação dispara um escaneamento. Uma configuração mudada no painel do Supabase não é uma publicação, e o âmbar segue para além da próxima, porque aquele escaneamento lê o projeto e não a tabela.","\u002Fblog\u002Flovable-security-scan\u002Fwhen-each-one-runs-1600x600.png",[10,381,382,386,387,390],{},[44,383,385],{"href":384},"\u002Fpricing","Reeve Monitor"," faz a metade de fora nos dias em que você não lembra.\nEle repassa as nove verificações a cada hora em até três aplicativos, olha se o\nseu aplicativo está respondendo, te avisa quando um resultado ",[17,388,389],{},"muda"," em vez de\nesperar você ir olhar, e manda um relatório no fim de cada mês.",[22,392,394],{"id":393},"lendo-um-resultado-verde","Lendo um resultado verde",[10,396,397],{},"Um resultado limpo quer dizer que toda pergunta que aquele escaneamento\nconseguia fazer voltou limpa no dia em que você rodou. Isso vale alguma coisa, e\nnão é um veredito sobre o seu aplicativo.",[10,399,400],{},"O Lovable coloca a mesma ressalva na própria documentação: as ferramentas ajudam\na identificar problemas comuns de segurança e não conseguem garantir segurança\ncompleta. O nosso carrega ela também, porque uma verificação externa automática\nnão é uma auditoria e uma lista de achados vazia não é uma garantia.",[10,402,403,404,407],{},"A única regra para quando os dois discordam: ",[17,405,406],{},"se o escaneamento por dentro está\nlimpo e um de fora diz que uma tabela respondeu a uma requisição sem login, aja\npela resposta de fora."," É a resposta que os seus usuários recebem, e é a\nresposta que qualquer outra pessoa recebe. Vá ler a política daquela tabela.",[10,409,410,411,415,416,113],{},"Se o seu aplicativo está no Supabase, o passo a passo em linguagem simples para\nesta plataforma é\n",[44,412,414],{"href":413},"\u002Fis-your-lovable-app-safe","o seu aplicativo Lovable é seguro",", e as verificações\nescritas como comandos para você mesmo rodar estão em\n",[44,417,419],{"href":418},"\u002Fblog\u002Fsupabase-security-checker","o verificador de segurança do Supabase",[22,421,423],{"id":422},"o-que-fazer-esta-semana","O que fazer esta semana",[425,426,427],"key-takeaways",{},[148,428,429,432,435,438,441,449],{},[151,430,431],{},"Leia o resultado do Quick scan na publicação em vez de passar direto, e trate um rótulo Critical como algo a consertar antes de o aplicativo sair.",[151,433,434],{},"Dispare um Deep scan na mão. Ele não começa sozinho, então um projeto em que nunca dispararam um nunca teve o código lido.",[151,436,437],{},"Depois de publicar, escaneie o endereço no ar de fora. É a única verificação que faz a requisição que um estranho faz.",[151,439,440],{},"Leia a política de toda tabela que guarda pessoas. Uma que deixa todo mundo passar deixa a tabela aberta enquanto o painel dá ela como protegida.",[151,442,443,444,448],{},"Confira se a chave no seu aplicativo é a publicável. ",[44,445,447],{"href":446},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Quais chaves de API são seguras no front-end"," mostra como diferenciar as duas.",[151,450,451],{},"Quando as respostas de dentro e de fora se contradizem, os seus usuários recebem a de fora.",[10,453,454,455,459],{},"Se o seu aplicativo Lovable usa Supabase, abra uma janela anônima e passe pela\nlista em Authentication e Policies antes de sexta.\n",[44,456,458],{"href":457},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Qualquer um consegue ler seu banco de dados Supabase","\né o mesmo teste escrito como comandos para colar num terminal.",{"title":461,"searchDepth":462,"depth":462,"links":463},"",3,[464,466,467,468,469,470,471,472,473],{"id":24,"depth":465,"text":25},2,{"id":63,"depth":465,"text":64},{"id":91,"depth":465,"text":92},{"id":116,"depth":465,"text":117},{"id":139,"depth":465,"text":140},{"id":201,"depth":465,"text":202},{"id":339,"depth":465,"text":340},{"id":393,"depth":465,"text":394},{"id":422,"depth":465,"text":423},"Noções de segurança","\u002Fblog\u002Flovable-security-scan\u002Fcover-1200x630.png","Um painel de relatório com uma coluna de marcas de certo e, atrás dele, saindo da borda da imagem, um banco de dados com linhas escapando.","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.",false,"md",[481,483,486,489,492],{"q":25,"a":482},"Sim, e são dois escaneamentos. O Quick scan roda sozinho toda vez que você publica e termina em segundos, cobrindo as regras de acesso do seu banco, suas dependências npm e qualquer servidor MCP que seu aplicativo exponha sem autenticação. O Deep scan lê todo o código do seu aplicativo e você mesmo precisa dispará-lo na visão Security do projeto. Os dois são gratuitos, e os dois leem o seu projeto em vez do seu aplicativo publicado.",{"q":484,"a":485},"Qual a diferença entre o Quick scan e o Deep scan?","Velocidade e profundidade. O Quick scan roda um conjunto fixo de verificações em segundos, automaticamente na publicação, e cobre as configurações do seu banco, suas dependências e a exposição de MCP. O Deep scan inclui tudo do Quick scan e depois lê o código do seu aplicativo atrás de problemas ligados à sua própria lógica e aos seus dados: controle de acesso, endpoints sem autenticação, injeção, credenciais vazadas, pagamentos, segurança de contas e dados pessoais expostos. O Deep scan não roda sozinho enquanto você trabalha, então um projeto em que nunca dispararam um nunca teve o código lido.",{"q":487,"a":488},"O escaneamento de segurança do Lovable é suficiente?","É uma verificação de verdade e enxerga coisas que nenhuma ferramenta externa enxerga, como a sua árvore de dependências e uma tabela que o seu front-end nunca nomeia. O que ele não faz é a requisição que os seus visitantes fazem. Uma política pode existir, parecer válida e ainda assim devolver todas as linhas, e a única coisa que resolve isso é perguntar ao seu aplicativo publicado de fora, sem login. O Lovable diz o mesmo na própria documentação: as ferramentas ajudam a identificar problemas comuns de segurança e não conseguem garantir segurança completa.",{"q":490,"a":491},"Por que um escâner externo acha coisas que o escaneamento do Lovable deixou passar?","Porque os dois leem objetos diferentes. Um escaneamento por dentro lê o seu projeto: o esquema, as políticas, a árvore de dependências, o código. Um escaneamento de fora lê o que o aplicativo publicado entrega a um estranho sem login. De fora, uma tabela sem proteção nenhuma e uma tabela com uma política que deixa todo mundo passar dão a mesma resposta, que são linhas. Essa resposta é a que os seus usuários e todos os outros recebem de fato, então quando os dois discordam é ela que vale.",{"q":493,"a":494},"Preciso dos dois?","Eles respondem perguntas diferentes, então rodar um não substitui o outro. A ordem útil é a ordem em que as duas coisas acontecem: deixe o Quick scan rodar na publicação, dispare um Deep scan antes de qualquer coisa real ir ao ar e depois de acrescentar login, pagamentos ou uma tabela com pessoas dentro, e então escaneie o endereço publicado de fora. Um escaneamento de fora leva uns 20 segundos e não precisa de conta.","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",[497,498,499,500,501,502,503,504,505],"escaneamento de segurança do lovable","lovable security scan","lovable deep scan","lovable quick scan","lovable verifica segurança","lovable rls","verificação do lovable antes de publicar","revisão de segurança lovable","o escaneamento do lovable é suficiente",{},true,"Escaneamento de segurança do Lovable: o que não prova","\u002Fblog\u002Flovable-security-scan","2026-09-24",{"title":5,"description":477},"blog\u002Flovable-security-scan",[514,515,516],"O escaneamento de segurança do Lovable são na verdade dois: um Quick scan que roda sozinho toda vez que você publica, e um Deep scan que você mesmo dispara e que lê todo o código do seu aplicativo. Os dois são gratuitos.","Os dois leem o seu projeto por dentro. Nenhum deles faz a requisição que um estranho faz, então nenhum deles prova o que o seu aplicativo publicado entrega.","Dos 3.553 aplicativos Lovable cujo banco Supabase conseguimos perguntar de fora, 2.017 responderam a uma requisição sem login. Rode o escaneamento por dentro antes de publicar e um de fora depois.","_TOeORhxWXnHjDP6cZsc3_2mcu8lyRwsUTD6k4tSbQ8",[519,525,531,537,543,549,555,561,567,573,579,585,591,598,604,610,615,621,622,628,634,639,645,651,657,663,669,675,681,687,693,699,705,711,717,723,728,733,739,745,751,757,763,769,775,781,787,793,799,805,811,817,823,828,833,839,845,850,855,861],{"path":520,"title":521,"description":522,"published":523,"category":474,"image":524,"draft":478},"\u002Fblog\u002Fbase44-security-scan","Scan de segurança do Base44: o que só ele enxerga","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.","2026-10-10","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":526,"title":527,"description":528,"published":529,"category":474,"image":530,"draft":478},"\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":532,"title":533,"description":534,"published":535,"category":474,"image":536,"draft":478},"\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":538,"title":539,"description":540,"published":541,"category":474,"image":542,"draft":478},"\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":544,"title":545,"description":546,"published":547,"category":474,"image":548,"draft":478},"\u002Fblog\u002Fis-base44-safe","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":550,"title":551,"description":552,"published":553,"category":474,"image":554,"draft":478},"\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":556,"title":557,"description":558,"published":559,"category":474,"image":560,"draft":478},"\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":562,"title":563,"description":564,"published":565,"category":474,"image":566,"draft":478},"\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":568,"title":569,"description":570,"published":571,"category":474,"image":572,"draft":478},"\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":574,"title":575,"description":576,"published":577,"category":474,"image":578,"draft":478},"\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":580,"title":581,"description":582,"published":583,"category":474,"image":584,"draft":478},"\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":586,"title":587,"description":588,"published":589,"category":474,"image":590,"draft":478},"\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":592,"title":593,"description":594,"published":595,"category":596,"image":597,"draft":478},"\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":599,"title":600,"description":601,"published":602,"category":596,"image":603,"draft":478},"\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":605,"title":606,"description":607,"published":608,"category":596,"image":609,"draft":478},"\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":611,"title":612,"description":613,"published":608,"category":474,"image":614,"draft":478},"\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":616,"title":617,"description":618,"published":619,"category":474,"image":620,"draft":478},"\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":509,"title":5,"description":477,"published":510,"category":474,"image":495,"draft":478},{"path":623,"title":624,"description":625,"published":626,"category":596,"image":627,"draft":478},"\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":629,"title":630,"description":631,"published":632,"category":474,"image":633,"draft":478},"\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":135,"title":635,"description":636,"published":637,"category":474,"image":638,"draft":478},"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":640,"title":641,"description":642,"published":643,"category":474,"image":644,"draft":478},"\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":646,"title":647,"description":648,"published":649,"category":474,"image":650,"draft":478},"\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":652,"title":653,"description":654,"published":655,"category":474,"image":656,"draft":478},"\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":658,"title":659,"description":660,"published":661,"category":474,"image":662,"draft":478},"\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":664,"title":665,"description":666,"published":667,"category":474,"image":668,"draft":478},"\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":670,"title":671,"description":672,"published":673,"category":474,"image":674,"draft":478},"\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":676,"title":677,"description":678,"published":679,"category":596,"image":680,"draft":478},"\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":682,"title":683,"description":684,"published":685,"category":596,"image":686,"draft":478},"\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":688,"title":689,"description":690,"published":691,"category":596,"image":692,"draft":478},"\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":694,"title":695,"description":696,"published":697,"category":474,"image":698,"draft":478},"\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":700,"title":701,"description":702,"published":703,"category":474,"image":704,"draft":478},"\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":706,"title":707,"description":708,"published":709,"category":474,"image":710,"draft":478},"\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":712,"title":713,"description":714,"published":715,"category":474,"image":716,"draft":478},"\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":718,"title":719,"description":720,"published":721,"category":474,"image":722,"draft":478},"\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":418,"title":724,"description":725,"published":726,"category":474,"image":727,"draft":478},"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":335,"title":729,"description":730,"published":731,"category":474,"image":732,"draft":478},"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":734,"title":735,"description":736,"published":737,"category":474,"image":738,"draft":478},"\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":740,"title":741,"description":742,"published":743,"category":474,"image":744,"draft":478},"\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":746,"title":747,"description":748,"published":749,"category":474,"image":750,"draft":478},"\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":752,"title":753,"description":754,"published":755,"category":596,"image":756,"draft":478},"\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":758,"title":759,"description":760,"published":761,"category":474,"image":762,"draft":478},"\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":764,"title":765,"description":766,"published":767,"category":596,"image":768,"draft":478},"\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":770,"title":771,"description":772,"published":773,"category":474,"image":774,"draft":478},"\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":776,"title":777,"description":778,"published":779,"category":474,"image":780,"draft":478},"\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":782,"title":783,"description":784,"published":785,"category":474,"image":786,"draft":478},"\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":788,"title":789,"description":790,"published":791,"category":474,"image":792,"draft":478},"\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":794,"title":795,"description":796,"published":797,"category":596,"image":798,"draft":478},"\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":800,"title":801,"description":802,"published":803,"category":596,"image":804,"draft":478},"\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":806,"title":807,"description":808,"published":809,"category":474,"image":810,"draft":478},"\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":812,"title":813,"description":814,"published":815,"category":474,"image":816,"draft":478},"\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":818,"title":819,"description":820,"published":821,"category":596,"image":822,"draft":478},"\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":457,"title":824,"description":825,"published":826,"category":474,"image":827,"draft":478},"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":829,"title":830,"description":831,"published":826,"category":474,"image":832,"draft":478},"\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":834,"title":835,"description":836,"published":837,"category":474,"image":838,"draft":478},"\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":840,"title":841,"description":842,"published":843,"category":596,"image":844,"draft":478},"\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":111,"title":846,"description":847,"published":848,"category":474,"image":849,"draft":478},"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":851,"title":852,"description":853,"published":848,"category":596,"image":854,"draft":478},"\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":856,"title":857,"description":858,"published":859,"category":596,"image":860,"draft":478},"\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":446,"title":862,"description":863,"published":859,"category":474,"image":864,"draft":478},"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",1791618971781]