[{"data":1,"prerenderedAt":1007},["ShallowReactive",2],{"blog-pt-is-lovable-safe":3,"blog-index-pt":773},{"id":4,"title":5,"body":6,"category":725,"cover":726,"coverAlt":727,"description":728,"draft":729,"extension":730,"faq":731,"image":750,"keywords":751,"meta":761,"navigation":762,"ogTitle":763,"path":764,"published":765,"seo":766,"stem":767,"tldr":768,"updated":765,"__hash__":772},"blog_pt\u002Fblog\u002Fis-lovable-safe.md","O Lovable é seguro? O que vimos em 18.554 aplicativos Lovable",{"type":7,"value":8,"toc":708},"minimark",[9,13,21,24,29,32,35,57,60,66,70,83,220,223,228,240,247,251,254,264,275,287,290,301,305,308,314,319,340,347,351,354,361,367,374,386,390,393,400,407,410,414,417,420,426,429,433,436,439,534,542,555,562,566,569,577,581,584,619,632,636,639,642,653,664,672,676,700],[10,11,12],"p",{},"Você construiu algo no Lovable, funciona, e está prestes a colocar gente de\nverdade ali. Em algum momento dessa semana você digitou \"lovable é seguro\" numa\nbusca, e o que voltou foi ou uma página sobre uma divulgação de segurança de\n2025 ou um fornecedor te vendendo um escaneamento. Nenhuma das duas falava do\naplicativo que você está prestes a publicar.",[10,14,15,16,20],{},"Eis o que a maioria dessas respostas erra: ",[17,18,19],"strong",{},"\"o Lovable é seguro\" são três\nperguntas vestidas de uma frase só",", e a que decide se estranhos conseguem ler\nos dados dos seus usuários é a que quase ninguém mede.",[10,22,23],{},"Nós conseguimos medir. Entre 12 e 14 de agosto de 2026 passamos 30.998\naplicativos no ar pelas mesmas nove verificações externas que qualquer um pode\nrodar de graça na nossa página inicial, e 18.554 deles estavam publicados no\nLovable. É a maior coorte que temos, três em cada cinco aplicativos que já\nescaneamos. Isso foi o que voltou para eles, e até onde a nossa vista alcança.",[25,26,28],"h2",{"id":27},"o-lovable-é-seguro","O Lovable é seguro?",[10,30,31],{},"Como plataforma, sim, e por uma margem maior do que esperávamos. O que o próprio\nLovable entrega foi o mais limpo dos cinco construtores que medimos. Tudo que\ndecidiu uma nota estava dentro do aplicativo que o dono tinha construído.",[10,33,34],{},"Pense numa loja com o estoque do outro lado da rua. O Lovable constrói a loja:\nas vitrines, o balcão, a placa. O estoque é do Supabase, e tem a própria\nfechadura na própria porta. O que a loja entrega a um passante é uma pergunta. O\nque o estoque entrega a qualquer um que chegue e peça é outra completamente\ndiferente, e nenhuma arrumação na loja muda isso.",[36,37,38,45,51],"ol",{},[39,40,41,44],"li",{},[17,42,43],{},"A plataforma."," O Lovable publica seu aplicativo direito: certificado\nválido, domínio que não vence, nada vazando do build. Esta é a loja.",[39,46,47,50],{},[17,48,49],{},"O agente."," O código que a IA do Lovable escreve presta. Nenhum\nescaneamento externo enxerga a fiação, e este texto diz isso em vez de\nchutar.",[39,52,53,56],{},[17,54,55],{},"O aplicativo que você publicou."," O que um estranho alcança da calçada: uma\nchave no código que um navegador baixa, um bucket de armazenamento que lista\nos arquivos, uma tabela de banco que responde a quem perguntar.",[10,58,59],{},"Nossas verificações leem a terceira e duas partes da primeira. Na plataforma, o\ncertificado era válido em todos os 18.486 aplicativos onde conseguimos ler um, e\nnenhum domínio de 18.554 estava perto de vencer. Do agente não temos nada a\nmedir. Do aplicativo temos 18.554 respostas.",[61,62],"diagram",{"alt":63,"caption":64,"src":65},"Três painéis lado a lado. O primeiro traz o logo do Lovable com um cadeado e um certificado. O segundo traz um sinal de código com um brilho em cima. O terceiro traz uma página de navegador com um banco de dados separado do lado de fora, três visitantes se aproximando dos dois, e uma lupa só sobre esse painel, com o número 18.554 embaixo.","Três perguntas dentro de uma busca. Um escaneamento externo lê o terceiro painel e parte do primeiro, e nada do painel do meio.","\u002Fblog\u002Fis-lovable-safe\u002Fthree-questions-1600x700.png",[25,67,69],{"id":68},"o-que-encontramos-em-18554-aplicativos-lovable","O que encontramos em 18.554 aplicativos Lovable",[10,71,72,73,76,77,82],{},"Nove verificações, de fora, sem login e sem acesso à conta de ninguém. Nunca\nlemos uma linha: onde um banco respondia, perguntamos quantas linhas ele\nentregaria e paramos ali. Nenhum aplicativo é nomeado aqui nem em nada que\npublicamos. Cada proporção abaixo é sobre os aplicativos em que a verificação\n",[17,74,75],{},"respondeu",", porque uma verificação que não conseguiu terminar é desconhecida\ne não aprovada, e essa regra é o motivo de os denominadores se moverem. O método\ne os dados estão ",[78,79,81],"a",{"href":80},"\u002Fresearch\u002Fvibe-coded-app-security-2026","no relatório",".",[84,85,86,103],"table",{},[87,88,89],"thead",{},[90,91,92,96,100],"tr",{},[93,94,95],"th",{},"O que verificamos",[93,97,99],{"align":98},"right","Aplicativos Lovable",[93,101,102],{},"Quem decide isso",[104,105,106,118,129,139,149,160,170,180,199,210],"tbody",{},[90,107,108,112,115],{},[109,110,111],"td",{},"Cabeçalhos de segurança do navegador ausentes",[109,113,114],{"align":98},"18.539 de 18.554 (99 %)",[109,116,117],{},"A hospedagem do Lovable",[90,119,120,123,126],{},[109,121,122],{},"Uma tabela de banco legível sem login",[109,124,125],{"align":98},"2.017 de 3.553 (57 %)",[109,127,128],{},"Seu aplicativo",[90,130,131,134,137],{},[109,132,133],{},"Algo com formato de chave no código que um visitante baixa",[109,135,136],{"align":98},"822 de 18.554 (4 %)",[109,138,128],{},[90,140,141,144,147],{},[109,142,143],{},"Um bucket de armazenamento que lista os arquivos",[109,145,146],{"align":98},"768 de 16.565 (5 %)",[109,148,128],{},[90,150,151,154,157],{},[109,152,153],{},"Código-fonte original publicado (source maps)",[109,155,156],{"align":98},"225 de 18.553 (1 %)",[109,158,159],{},"Uma opção do build",[90,161,162,165,168],{},[109,163,164],{},"Uma rota de API que entregou dados a um estranho",[109,166,167],{"align":98},"8 de 18.518",[109,169,128],{},[90,171,172,175,178],{},[109,173,174],{},"Qualquer site autorizado a chamar sua API",[109,176,177],{"align":98},"0 de 18.518",[109,179,128],{},[90,181,182,194,197],{},[109,183,184,185,189,190,193],{},"Um arquivo privado como ",[186,187,188],"code",{},".env"," ou ",[186,191,192],{},".git\u002Fconfig"," numa URL aberta",[109,195,196],{"align":98},"0 de 18.442",[109,198,128],{},[90,200,201,204,207],{},[109,202,203],{},"Certificado vencido ou não confiável",[109,205,206],{"align":98},"0 de 18.486",[109,208,209],{},"Lovable",[90,211,212,215,218],{},[109,213,214],{},"Domínio prestes a vencer",[109,216,217],{"align":98},"0 de 18.554",[109,219,209],{},[10,221,222],{},"As notas: 15.963 A, 370 B, 1.814 C, 402 D e 5 F. Nove aplicativos não tiveram\nnenhum achado.",[61,224],{"alt":225,"caption":226,"src":227},"Seis barras horizontais numa mesma escala, cada uma com um sinal pequeno antes e um número depois: 18.539 para cabeçalhos, 2.017 para tabelas expostas, 822 para chaves, 768 para buckets de armazenamento, 225 para source maps e 8 para rotas abertas. A barra de cima é cinza clara e as demais são turquesa, e o 8 é um traço fino com um anel em volta.","Quantidade de aplicativos, não taxas: uma escala, seis achados. A barra cinza é decidida pela hospedagem. Cada barra turquesa veio de algo dentro do aplicativo. A linha das tabelas expostas é medida contra um denominador menor, que a próxima imagem desmonta.","\u002Fblog\u002Fis-lovable-safe\u002Fwhat-we-found-1600x680.png",[10,229,230,231,234,235,239],{},"Essa primeira linha é o motivo de \"99 % dos aplicativos Lovable têm um problema\nde segurança\" ser uma frase que você vai ler em algum lugar e deve ignorar. Os\ncabeçalhos de segurança do navegador são enviados por quem serve a sua página, e\nem ",[186,232,233],{},"seuapp.lovable.app"," isso é o Lovable, e por isso todo aplicativo naquele\nhost recebe a mesma resposta. Eles\n",[78,236,238],{"href":237},"\u002Fblog\u002Fmissing-security-headers","valem a pena"," e não são do que um D é feito.",[10,241,242,243,246],{},"Tire essa linha e ",[17,244,245],{},"15.453 dos 18.554 aplicativos não tinham mais nada",". Os\n3.092 restantes são o resto deste texto.",[25,248,250],{"id":249},"o-que-o-lovable-acerta-e-é-quase-toda-a-lista","O que o Lovable acerta, e é quase toda a lista",[10,252,253],{},"Três dos números acima são os melhores que já anotamos em qualquer construtor, e\nos três são decididos pela plataforma e não por você.",[10,255,256,259,260,82],{},[17,257,258],{},"Source maps."," 225 de 18.553 aplicativos Lovable publicam os arquivos\noriginais por trás do aplicativo, comentários inclusos. Isso é cerca de 1 em 80.\nNo Base44 a mesma verificação dispara em 59 % dos aplicativos, e no Replit em\n6 %. O build de produção do Lovable faz a coisa certa por padrão, então\n",[78,261,263],{"href":262},"\u002Fblog\u002Fsource-maps-exposed-in-production","isso quase nunca é problema seu",[10,265,266,269,270,274],{},[17,267,268],{},"Cabeçalhos cross-origin."," Zero aplicativos de 18.518 disseram a um site\nqualquer do mundo que ele podia chamar sua API, e zero permitiram isso com os\ncookies de login do visitante. Esse é o achado que\n",[78,271,273],{"href":272},"\u002Fblog\u002Fcors-wildcard-security-risk","com mais facilidade deixa outro site agir como o seu usuário",",\ne no Lovable ele não apareceu uma vez sequer.",[10,276,277,280,281,283,284,286],{},[17,278,279],{},"Arquivos privados perdidos."," Zero aplicativos de 18.442 serviam um ",[186,282,188],{}," ou\num ",[186,285,192],{}," a partir de uma URL comum. Um aplicativo Lovable não tem\nservidor próprio para configurar errado, então não há arquivo esquecido lá\natrás.",[10,288,289],{},"Nada disso é prêmio de consolação. É a parte do trabalho em que você não\nprecisou pensar e em que, na maioria dos outros construtores, alguém pensa.",[291,292,294],"callout",{"type":293},"note",[10,295,296,297,82],{},"De graça, sem conta, uns 20 segundos: o escaneamento da nossa página inicial\nroda as nove verificações contra o seu aplicativo no ar e escreve \"Não foi\npossível verificar\" em vez de um visto para tudo que não obteve resposta.\n",[78,298,300],{"href":299},"\u002Fsecurity-scanner","Escanear seu aplicativo",[25,302,304],{"id":303},"o-único-número-que-importa-2017-de-3553","O único número que importa: 2.017 de 3.553",[10,306,307],{},"Dos aplicativos Lovable cujo banco Supabase conseguimos de fato perguntar, 57 %\nentregaram linhas a uma requisição sem login nenhum.",[10,309,310,311,82],{},"Vale percorrer os denominadores, porque esse é o número que todo mundo cita e\nquase ninguém enquadra. De 18.554 aplicativos Lovable, 6.532 nomeavam um projeto\nSupabase no código que entregam. Desses, 3.553 responderam bem o bastante para\npodermos julgar, e os outros 2.979 não, então são desconhecidos e não limpos.\nDos 3.553, ",[17,312,313],{},"2.017 devolveram linhas a um estranho",[61,315],{"alt":316,"caption":317,"src":318},"Um funil desenhado como quatro barras empilhadas que vão estreitando: 18.554 aplicativos Lovable, 6.532 que nomeavam um projeto Supabase, 3.553 cujo banco deu uma resposta aproveitável, e 2.017 que devolveram linhas sem login. A última barra é vermelha e a terceira traz um ponto de interrogação para os 2.979 que não deu para julgar.","Quatro denominadores, não um. A barra que é citada como manchete é a última, e ela é medida contra a terceira.","\u002Fblog\u002Fis-lovable-safe\u002Fwhere-it-lands-1600x620.png",[10,320,321,322,325,326,329,330,329,333,329,336,339],{},"Em ",[17,323,324],{},"373"," desses aplicativos a tabela que respondeu tinha nome de gente:\n",[186,327,328],{},"users",", ",[186,331,332],{},"profiles",[186,334,335],{},"orders",[186,337,338],{},"messages",". São 373 aplicativos, não 373 tabelas.\nNos outros 1.644 era algo que não conseguimos nomear de fora: talvez um catálogo\nde produtos que sempre foi para ser público, talvez qualquer outra coisa.",[10,341,342,343,346],{},"Medido contra todos os aplicativos Lovable escaneados em vez do subconjunto que\npudemos julgar, 2.017 de 18.554 dá cerca de ",[17,344,345],{},"11 em cada 100",". Guarde esse\nnúmero por duas seções.",[25,348,350],{"id":349},"por-que-isso-cai-no-banco-de-dados-e-não-no-lovable","Por que isso cai no banco de dados e não no Lovable",[10,352,353],{},"Por causa de uma decisão de projeto que é correta, deliberada, e quase nunca\nexplicada para a pessoa que ela afeta.",[10,355,356,357,360],{},"Um aplicativo Lovable não tem servidor próprio. A página no navegador do\nvisitante fala direto com o Supabase, e é por isso que dá para construir a coisa\ntoda numa tarde e por que tão poucos desses aplicativos têm uma rota de API\naberta: não existe uma API sua para deixar aberta. Para isso funcionar, o\nendereço do seu banco e uma chave para ele precisam estar impressos dentro do\naplicativo, onde qualquer um pode ler. Essa chave é a chave ",[17,358,359],{},"publicável",", e\nela ser pública está certo. Ela deve mesmo estar ali.",[10,362,363,364,366],{},"O que significa que a única coisa entre um estranho e a sua tabela ",[186,365,328],{}," é uma\nconfiguração do Supabase por tabela chamada Row Level Security. Com ela ligada e\numa policy escrita, a chave pública lê só as linhas que a policy permite. Com\nela desligada, a chave pública lê a tabela.",[10,368,369,370,373],{},"Agora a parte que decide a maioria dos projetos Lovable. O Supabase liga o Row\nLevel Security por padrão para tabelas que você cria clicando no Table Editor.\nTabelas criadas ",[17,371,372],{},"rodando SQL"," não recebem isso, e rodar SQL é como um\nconstrutor cria tabelas para você. Então a forma comum de um projeto Lovable é:\nalgumas tabelas feitas à mão, que estão protegidas, ao lado das que foram\ngeradas, que podem não estar. As duas parecem idênticas. Nenhuma reclama. O\naplicativo funciona perfeitamente dos dois jeitos, e esse é todo o problema:\nnada que você veja de frente diz qual das duas você tem.",[10,375,376,377,381,382,82],{},"A versão longa disso, com o SQL,\n",[78,378,380],{"href":379},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","está aqui",", e o guia em linguagem\nsimples para esta plataforma é\n",[78,383,385],{"href":384},"\u002Fis-your-lovable-app-safe","seu aplicativo Lovable é seguro",[25,387,389],{"id":388},"a-policy-que-apaga-o-erro-e-deixa-a-tabela-aberta","A policy que apaga o erro e deixa a tabela aberta",[10,391,392],{},"Ligar o Row Level Security é o passo um de dois, e é no passo dois que um\nassistente de IA faz de muito boa vontade a coisa errada.",[10,394,395,396,399],{},"Com a configuração ligada e sem policy escrita, o seu próprio aplicativo para de\nfuncionar. Você recebe um erro, cola no chat, e volta algo que faz o erro sumir.\nMuitas vezes o que volta é uma policy que permite todo mundo, escrita como\n",[186,397,398],{},"using (true)",". É uma policy válida. Ela atende ao requisito de existir uma\npolicy. Ela permite cada linha a cada requisição.",[10,401,402,403,82],{},"O painel agora informa a tabela como protegida, o erro sumiu, seu aplicativo\nfunciona, e a tabela está exatamente tão legível quanto antes. Temos um artigo\ninteiro sobre isso porque é a falha mais convincente da pilha toda:\n",[78,404,406],{"href":405},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","o RLS está ligado e sua tabela continua pública",[10,408,409],{},"Se você já colou um erro de Row Level Security numa janela de chat e aceitou a\nprimeira correção que fez o build passar, vá ler essa policy hoje.",[25,411,413],{"id":412},"cve-2025-48757-e-por-que-ela-não-é-mais-a-sua-pergunta","CVE-2025-48757, e por que ela não é mais a sua pergunta",[10,415,416],{},"Ela é real, foi séria, e do lado do Lovable está fechada há mais de um ano.\nTambém não é o que você deveria estar conferindo.",[10,418,419],{},"Em maio de 2025 o pesquisador de segurança Matt Palmer publicou a\nCVE-2025-48757, sobre aplicativos Lovable cujas tabelas no Supabase estavam sem\nRow Level Security ou com ele escrito de forma permissiva demais. Ele escaneou\n1.645 aplicativos Lovable e achou 170 com bancos expostos. A resposta do Lovable\nfoi adicionar uma verificação de segurança que roda antes de publicar e avisa\nsobre tabelas desprotegidas.",[10,421,422,423],{},"E aqui vai a leitura honesta, e é por isso que a CVE é o enquadramento errado.\nAquela divulgação achou cerca de 10 aplicativos expostos em cada 100. Dezesseis\nmeses depois, numa coorte onze vezes maior, achamos cerca de 11 em cada 100. Os\ndenominadores não são idênticos e nenhuma das duas amostras é a internet\ninteira, então tome as duas como a mesma ordem de grandeza e não como uma\ncomparação precisa. A direção está clara o bastante: ",[17,424,425],{},"a taxa não caiu.",[10,427,428],{},"Isso não é uma correção que falhou. É sinal de que nunca foi de fato uma\nvulnerabilidade de produto. É uma configuração nas suas próprias tabelas, no seu\npróprio projeto Supabase, que ninguém mais consegue ligar por você. Uma correção\nnão alcança isso, e é exatamente por isso que uma verificação que você mesmo\nroda alcança.",[25,430,432],{"id":431},"do-que-as-822-chaves-eram-feitas-de-verdade","Do que as 822 chaves eram feitas de verdade",[10,434,435],{},"Quase todas estavam certas, e um scanner que te dissesse o contrário estaria te\nensinando a ignorá-lo.",[10,437,438],{},"822 dos 18.554 aplicativos Lovable tinham algo com formato de chave no código\nque um visitante baixa. Lido como uma lista de formatos, isso é 4 % dos\naplicativos \"vazando segredos\". Lido como o que cada chave de fato consegue\nfazer, fica assim:",[84,440,441,454],{},[87,442,443],{},[90,444,445,448,451],{},[93,446,447],{},"O que achamos no bundle",[93,449,450],{"align":98},"Apps",[93,452,453],{},"O que significa",[104,455,456,467,478,489,499,509,523],{},[90,457,458,461,464],{},[109,459,460],{},"Uma chave de API do Google",[109,462,463],{"align":98},"727",[109,465,466],{},"Em geral correta, uma vez restrita ao seu domínio",[90,468,469,472,475],{},[109,470,471],{},"Um segredo não atribuível",[109,473,474],{"align":98},"82",[109,476,477],{},"Não conseguimos dizer a qual provedor pertence",[90,479,480,483,486],{},[109,481,482],{},"Uma chave da OpenAI",[109,484,485],{"align":98},"18",[109,487,488],{},"Cobra da sua conta, direto",[90,490,491,494,497],{},[109,492,493],{},"Uma chave de acesso da AWS",[109,495,496],{"align":98},"7",[109,498,488],{},[90,500,501,504,507],{},[109,502,503],{},"Uma chave da Anthropic",[109,505,506],{"align":98},"3",[109,508,488],{},[90,510,511,518,520],{},[109,512,513,514,517],{},"Um ",[186,515,516],{},"service_role"," do Supabase",[109,519,506],{"align":98},[109,521,522],{},"Lê e escreve cada linha de cada tabela, ignora cada regra",[90,524,525,528,531],{},[109,526,527],{},"Um segredo da Stripe em vivo",[109,529,530],{"align":98},"2",[109,532,533],{},"Sua conta de pagamentos",[10,535,536,537,541],{},"As 727 chaves do Google são o motivo de classificarmos em vez de só reconhecer\nformatos. Uma chave do Google Maps num navegador está onde deve estar, e a\ncorreção é\n",[78,538,540],{"href":539},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","restringi-la ao seu próprio domínio","\nem vez de entrar em pânico.",[10,543,544,545,547,548,550,551,82],{},"As quatro últimas linhas são as que importam, e são raras: 30 aplicativos de\n18.554. São também os achados que custam dinheiro sozinhos, e costumam aparecer\ncomo uma fatura que chega antes de alguém notar. Dois detalhes para registro. As\ntrês chaves ",[186,546,516],{}," do escaneamento inteiro de 30.998 aplicativos estavam\nem aplicativos Lovable, e dois dos três segredos da Stripe em vivo também. Uma\nchave ",[186,549,516],{}," no navegador torna cada policy de Row Level Security do seu\nprojeto irrelevante em uma linha, e é por isso que é o único achado que\nclassificamos como crítico de imediato e o que\n",[78,552,554],{"href":553},"\u002Fblog\u002Frotate-supabase-service-role-key","vale rotacionar no mesmo dia",[10,556,557,558,82],{},"Distinguir os dois tipos leva cerca de um minuto, e\n",[78,559,561],{"href":560},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","escrevemos o guia",[25,563,565],{"id":564},"os-768-buckets-de-armazenamento-que-ninguém-quis-abrir","Os 768 buckets de armazenamento que ninguém quis abrir",[10,567,568],{},"Um bucket do Supabase marcado como público não serve só os arquivos que o seu\naplicativo referencia. Ele também lista cada arquivo lá dentro para quem\nperguntar.",[10,570,571,572,576],{},"768 dos 16.565 aplicativos Lovable verificáveis tinham pelo menos um bucket que\nlistava o conteúdo. O motivo é o mesmo das tabelas legíveis: deixar um bucket\npúblico é como você faz uma imagem aparecer, funciona na hora, e depois nada te\ndiz que a listagem veio junto. Notas fiscais enviadas, fotos de documentos e\navatares de usuários acabam todos no mesmo lugar.\n",[78,573,575],{"href":574},"\u002Fblog\u002Fsupabase-storage-bucket-public","O que um bucket público realmente expõe","\ncobre a correção, que são URLs assinadas e não um bucket privado do qual você\ndepois não consegue ler.",[25,578,580],{"id":579},"a-verificação-de-cinco-minutos-no-seu-aplicativo-lovable","A verificação de cinco minutos no seu aplicativo Lovable",[10,582,583],{},"Cada item é uma página que você abre. Use uma janela anônima para que o seu\npróprio login não responda no lugar de um estranho.",[36,585,586,592,598,604,610],{},[39,587,588,591],{},[17,589,590],{},"Supabase → Authentication → Policies."," Percorra a lista. Qualquer tabela\nmostrando Row Level Security desativado é legível por quem tiver o endereço\ndo seu projeto, que está impresso no seu aplicativo.",[39,593,594,597],{},[17,595,596],{},"Leia as policies das tabelas que estão com ele ligado."," Se uma delas\npermite todo mundo, a tabela está aberta e o painel continua chamando de\nprotegida.",[39,599,600,603],{},[17,601,602],{},"Supabase → Storage."," Qualquer bucket marcado como público lista os\narquivos para qualquer um. Veja o que tem dentro antes de decidir que está\ntudo bem.",[39,605,606,609],{},[17,607,608],{},"Supabase → Settings → API."," Confirme que a chave que o seu aplicativo\nentrega é a publicável. Se alguma chave secreta já foi colada no projeto,\nrotacione ali antes de apagar do código, porque o valor antigo continua\nfuncionando até você fazer isso.",[39,611,612,615,616,82],{},[17,613,614],{},"Ou deixe o escaneamento fazer."," Ele roda esses quatro de fora e mais\ncinco, leva uns 20 segundos, não pede conta, e mostra uma nota e o que a\nproduziu: ",[78,617,618],{"href":299},"escanear seu aplicativo",[10,620,621,622,626,627,631],{},"Se você prefere percorrer a superfície toda como uma lista, o\n",[78,623,625],{"href":624},"\u002Fchecklist","checklist de segurança de 10 minutos"," cobre o que vale confirmar em\nqualquer aplicativo recém-lançado, e\n",[78,628,630],{"href":629},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","qualquer um consegue ler seu banco de dados Supabase","\né o teste para fazer se você só for fazer uma coisa.",[25,633,635],{"id":634},"seu-aplicativo-muda-toda-vez-que-você-publica","Seu aplicativo muda toda vez que você publica",[10,637,638],{},"Um escaneamento que você rodou mês passado descreve o aplicativo do mês passado,\ne no Lovable esse é um mês mais curto que na maioria.",[10,640,641],{},"Publicar é um clique, então uma mudança está no ar assim que você a aceita. Não\nexiste passo de deploy entre você e a internet para pegar uma tabela adicionada\nhoje de manhã com Row Level Security desligado, ou uma chave colada no chat à\nmeia-noite para passar de um build que falhava. Cada um dos 2.017 bancos\nexpostos que achamos era de alguém cujo aplicativo funcionava perfeitamente.",[10,643,644,648,649,652],{},[78,645,647],{"href":646},"\u002Fpricing","Reeve Monitor"," é a versão deste texto que roda sozinha. Ele repete as\nnove verificações toda hora em até três aplicativos, olha a cada 60 segundos se\no aplicativo responde, te avisa quando um resultado ",[17,650,651],{},"muda"," em vez de esperar\nvocê olhar, e manda um relatório mensal. Custa $12 por mês no preço de tabela,\ncom sete dias grátis antes de cobrar; a página de preços às vezes fica abaixo do\nnúmero daqui e nunca acima.",[10,654,655,658,659,663],{},[17,656,657],{},"Se o seu aplicativo Lovable usa Supabase, e 6.532 dos 18.554 escaneados usam,\na outra metade do problema é a cópia."," Uma tabela exposta é algo que um\nestranho consegue ler. Um agente com acesso ao banco, ou uma migração que rodou\nao contrário, é algo que consegue apagar, e o backup diário do próprio Supabase\nno plano gratuito não é algo que você consiga restaurar sozinho.\n",[78,660,662],{"href":661},"\u002Fsupabase-backups","O Reeve Care"," tira toda noite uma cópia criptografada do seu\nbanco Supabase, guarda onde o seu projeto não alcança, verifica que cada cópia\nrealmente restaura, e te dá uma restauração em um clique quando precisar. Tudo\nque o Monitor faz está incluído. O Care custa $49 por mês no preço de tabela\npara um aplicativo, com os mesmos sete dias grátis.",[10,665,666,667,671],{},"O formato dessa segunda falha, contado por quem passou por ela, está em\n",[78,668,670],{"href":669},"\u002Fblog\u002Fai-agent-deleted-my-database","o dia em que um agente de IA apagou um banco de produção",".\nNenhuma das nove verificações deste artigo teria ajudado ali. Uma cópia teria.",[25,673,675],{"id":674},"o-que-fazer-esta-semana","O que fazer esta semana",[677,678,679],"key-takeaways",{},[680,681,682,685,688,691,697],"ul",{},[39,683,684],{},"Abra Supabase → Authentication → Policies e leia a lista. Qualquer tabela com Row Level Security desativado é legível por quem tiver o endereço do seu aplicativo.",[39,686,687],{},"Leia as policies das tabelas que estão com ele ligado. Uma que permite todo mundo deixa a tabela aberta enquanto o painel informa como protegida.",[39,689,690],{},"Confira o Storage atrás de buckets públicos. Um bucket público lista cada arquivo lá dentro, não só os que o seu aplicativo referencia.",[39,692,693,694,696],{},"Confirme que a chave no seu aplicativo é a publicável. Uma chave ",[186,695,516],{}," no navegador torna irrelevante cada policy que você escreveu, e é tarefa do mesmo dia.",[39,698,699],{},"Guarde uma cópia do seu banco onde o seu projeto e o seu agente não alcancem, e confira que essa cópia restaura.",[10,701,702,703,707],{},"O Lovable fez bem a metade dele. Os 2.017 são a metade que é sua, e é uma\nconfiguração e não uma reescrita. Se o que você quer é a comparação entre\nconstrutores,\n",[78,704,706],{"href":705},"\u002Fblog\u002Fsafest-ai-app-builder","qual construtor de aplicativos com IA é o mais seguro","\ntem a tabela dos cinco.",{"title":709,"searchDepth":710,"depth":710,"links":711},"",3,[712,714,715,716,717,718,719,720,721,722,723,724],{"id":27,"depth":713,"text":28},2,{"id":68,"depth":713,"text":69},{"id":249,"depth":713,"text":250},{"id":303,"depth":713,"text":304},{"id":349,"depth":713,"text":350},{"id":388,"depth":713,"text":389},{"id":412,"depth":713,"text":413},{"id":431,"depth":713,"text":432},{"id":564,"depth":713,"text":565},{"id":579,"depth":713,"text":580},{"id":634,"depth":713,"text":635},{"id":674,"depth":713,"text":675},"Noções de segurança","\u002Fblog\u002Fis-lovable-safe\u002Fcover-1200x630.png","O logo do Lovable em um bloco branco, uma seta para o aplicativo publicado, outra para três visitantes, e um banco de dados abaixo.","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.",false,"md",[732,735,738,741,744,747],{"q":733,"a":734},"O Lovable é seguro o bastante para um produto de verdade?","Do lado da plataforma, foi o mais limpo dos cinco construtores que escaneamos. Todo certificado que conseguimos ler era válido, nenhum domínio estava perto de vencer, nenhum aplicativo permitia que um site qualquer do mundo chamasse sua API, e 225 de 18.553 publicavam o código-fonte. O que decide se o seu produto é seguro ali é o banco de dados por trás: 2.017 dos 3.553 aplicativos Lovable cujo Supabase conseguimos perguntar entregaram linhas a uma requisição sem login. Isso é uma configuração nas suas tabelas, ela é sua, e você confere em uns cinco minutos.",{"q":736,"a":737},"As pessoas conseguem ver o código-fonte do meu aplicativo Lovable?","A metade do navegador, sempre, porque um navegador não desenha uma página que não recebeu. O que normalmente não dá para ler são os seus arquivos originais com comentários e nomes de variáveis, e é exatamente isso que um source map publicado entrega. 225 dos 18.553 aplicativos Lovable que verificamos publicavam um, cerca de 1 em 80, a menor taxa de todos os construtores que medimos. Suas consultas ao banco são outra história: um aplicativo Lovable fala com o Supabase direto do navegador, então os nomes de tabelas e colunas que ele lê ficam visíveis para quem abrir a aba de rede.",{"q":739,"a":740},"Meus dados no Supabase estão seguros em um aplicativo Lovable?","Depende de uma única configuração por tabela e de mais nada. Um aplicativo Lovable alcança o Supabase direto do navegador do visitante com uma chave publicável que deve mesmo ser pública, então a única coisa entre um estranho e uma tabela é o Row Level Security. Com ele desligado, essa chave pública lê a tabela inteira. Medimos isso em 3.553 aplicativos Lovable e 2.017 responderam a uma requisição anônima com linhas. Em 373 deles a tabela exposta tinha nome de gente: users, profiles, orders, messages.",{"q":742,"a":743},"O que foi a CVE-2025-48757 e ela ainda me afeta?","É a divulgação de 2025 do pesquisador de segurança Matt Palmer sobre aplicativos Lovable cujas tabelas no Supabase estavam sem Row Level Security ou com ele escrito de forma permissiva demais. Ele escaneou 1.645 aplicativos Lovable e achou 170 com bancos expostos. O Lovable respondeu adicionando uma verificação de segurança que roda antes de publicar. Não é uma correção que você esteja esperando, e nunca foi, porque a exposição é uma configuração nas suas próprias tabelas e não um defeito no código do Lovable, e é por isso que nossos números de 2026 se parecem tanto com os dele de 2025. Se afeta você ou não é algo que se responde hoje abrindo uma página no Supabase.",{"q":745,"a":746},"A verificação de segurança do Lovable pega uma tabela exposta?","O Lovable roda antes de publicar uma verificação que lê o seu projeto por dentro: o esquema, as policies, as dependências. Isso enxerga coisas que um escaneamento externo estruturalmente não enxerga, como uma tabela que o seu front-end nunca nomeia. O que ela não consegue provar é que uma policy realmente segura, porque uma policy pode existir, parecer válida e ainda assim devolver cada linha para todo mundo. As duas visões respondem perguntas diferentes, então rode a de dentro antes de publicar e uma de fora depois, e se elas discordarem, vale a resposta de fora.",{"q":748,"a":749},"O Lovable é mais seguro que o Bolt ou o Replit?","No que a plataforma decide, o Lovable ficou à frente dos outros quatro que medimos: menos source maps publicados que qualquer um deles, nenhum cabeçalho cross-origin aberto, e nenhum problema de certificado ou domínio. No que o dono decide, parece igual a todo o resto, porque esses achados vêm de como um aplicativo foi construído e não de onde. Colocamos a comparação completa em um artigo separado em vez de repetir a tabela aqui.","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",[752,753,754,755,756,757,758,759,760],"lovable é seguro","segurança do lovable","lovable é confiável","aplicativos lovable são seguros","segurança lovable supabase","lovable rls","lovable em produção","problemas de segurança do lovable","vazamento de dados lovable",{},true,"O Lovable é seguro? O que vimos em 18.554 aplicativos","\u002Fblog\u002Fis-lovable-safe","2026-09-21",{"title":5,"description":728},"blog\u002Fis-lovable-safe",[769,770,771],"O Lovable é seguro? A plataforma foi a mais limpa dos cinco construtores que medimos. 225 de 18.553 aplicativos publicavam o próprio código-fonte, nenhum disse a um site qualquer que ele podia chamar sua API, e 15.963 de 18.554 tiraram A.","Tudo de sério que encontramos estava dentro do aplicativo que o dono construiu. Dos 3.553 aplicativos Lovable cujo banco Supabase conseguimos perguntar, 2.017 entregaram linhas a uma requisição sem nenhum login.","Isso dá cerca de 11 em cada 100 aplicativos Lovable do nosso escaneamento. Um pesquisador medindo a mesma coisa em maio de 2025 achou 10 em cada 100, então dezesseis meses depois a taxa não se moveu.","oBm5kwWP3adTSeg1LCnzT7ystWlxW7zyMOsZqXCSEAI",[774,781,787,788,794,800,806,812,818,824,830,836,842,847,852,858,863,869,875,881,886,892,898,904,910,916,922,928,934,939,945,951,956,961,966,971,975,981,987,992,997,1003],{"path":775,"title":776,"description":777,"published":778,"category":779,"image":780,"draft":729},"\u002Fblog\u002Fsupabase-backup-auth-users","Por que seu dump do Supabase não tem usuários dentro","Rode supabase db dump sozinho e você recebe a forma do seu banco e nenhuma das linhas dele, sem o schema auth onde seus usuários moram.","2026-09-23","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":782,"title":783,"description":784,"published":785,"category":725,"image":786,"draft":729},"\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":764,"title":5,"description":728,"published":765,"category":725,"image":750,"draft":729},{"path":789,"title":790,"description":791,"published":792,"category":725,"image":793,"draft":729},"\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":795,"title":796,"description":797,"published":798,"category":725,"image":799,"draft":729},"\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":801,"title":802,"description":803,"published":804,"category":725,"image":805,"draft":729},"\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":807,"title":808,"description":809,"published":810,"category":725,"image":811,"draft":729},"\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":813,"title":814,"description":815,"published":816,"category":725,"image":817,"draft":729},"\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":819,"title":820,"description":821,"published":822,"category":725,"image":823,"draft":729},"\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":825,"title":826,"description":827,"published":828,"category":779,"image":829,"draft":729},"\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":831,"title":832,"description":833,"published":834,"category":779,"image":835,"draft":729},"\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":837,"title":838,"description":839,"published":840,"category":779,"image":841,"draft":729},"\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":705,"title":843,"description":844,"published":845,"category":725,"image":846,"draft":729},"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":379,"title":848,"description":849,"published":850,"category":725,"image":851,"draft":729},"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":853,"title":854,"description":855,"published":856,"category":725,"image":857,"draft":729},"\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":553,"title":859,"description":860,"published":861,"category":725,"image":862,"draft":729},"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":864,"title":865,"description":866,"published":867,"category":725,"image":868,"draft":729},"\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":870,"title":871,"description":872,"published":873,"category":725,"image":874,"draft":729},"\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":876,"title":877,"description":878,"published":879,"category":725,"image":880,"draft":729},"\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":237,"title":882,"description":883,"published":884,"category":725,"image":885,"draft":729},"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":887,"title":888,"description":889,"published":890,"category":725,"image":891,"draft":729},"\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":893,"title":894,"description":895,"published":896,"category":725,"image":897,"draft":729},"\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":899,"title":900,"description":901,"published":902,"category":779,"image":903,"draft":729},"\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":905,"title":906,"description":907,"published":908,"category":725,"image":909,"draft":729},"\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":911,"title":912,"description":913,"published":914,"category":779,"image":915,"draft":729},"\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":917,"title":918,"description":919,"published":920,"category":725,"image":921,"draft":729},"\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":923,"title":924,"description":925,"published":926,"category":725,"image":927,"draft":729},"\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":929,"title":930,"description":931,"published":932,"category":725,"image":933,"draft":729},"\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":272,"title":935,"description":936,"published":937,"category":725,"image":938,"draft":729},"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":940,"title":941,"description":942,"published":943,"category":779,"image":944,"draft":729},"\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":946,"title":947,"description":948,"published":949,"category":779,"image":950,"draft":729},"\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":574,"title":952,"description":953,"published":954,"category":725,"image":955,"draft":729},"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":539,"title":957,"description":958,"published":959,"category":725,"image":960,"draft":729},"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":669,"title":962,"description":963,"published":964,"category":779,"image":965,"draft":729},"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":629,"title":967,"description":968,"published":969,"category":725,"image":970,"draft":729},"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":262,"title":972,"description":973,"published":969,"category":725,"image":974,"draft":729},"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":976,"title":977,"description":978,"published":979,"category":725,"image":980,"draft":729},"\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":982,"title":983,"description":984,"published":985,"category":779,"image":986,"draft":729},"\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":405,"title":988,"description":989,"published":990,"category":725,"image":991,"draft":729},"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":993,"title":994,"description":995,"published":990,"category":779,"image":996,"draft":729},"\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":998,"title":999,"description":1000,"published":1001,"category":779,"image":1002,"draft":729},"\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":560,"title":1004,"description":1005,"published":1001,"category":725,"image":1006,"draft":729},"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",1790150954250]