[{"data":1,"prerenderedAt":905},["ShallowReactive",2],{"blog-pt-is-v0-safe":3,"blog-index-pt":554},{"id":4,"title":5,"body":6,"category":508,"cover":509,"coverAlt":510,"description":511,"draft":512,"extension":513,"faq":514,"image":532,"keywords":533,"meta":543,"navigation":544,"ogTitle":5,"path":545,"published":546,"seo":547,"stem":548,"tldr":549,"updated":546,"__hash__":553},"blog_pt\u002Fblog\u002Fis-v0-safe.md","Segurança do v0: os 1.790 aplicativos v0 escaneados tiraram A",{"type":7,"value":8,"toc":494},"minimark",[9,18,21,29,34,37,40,63,66,91,95,98,122,134,147,153,164,168,171,174,186,190,193,206,212,224,228,231,240,243,248,265,272,276,279,291,294,317,325,329,332,373,380,384,390,400,418,421,431,448,451,459,463,486],[10,11,12,13,17],"p",{},"Você descreveu um aplicativo para o v0, viu ele construir e recebeu de volta um\nlink que termina em ",[14,15,16],"code",{},"vusercontent.net",". Funciona, parece pronto, e talvez você\njá tenha mandado para alguém. Antes que clientes de verdade digitem os dados\ndeles ali, você pesquisou a segurança do v0, e parte do que apareceu foi uma\nhistória sobre atacantes usando o v0 para construir páginas de login falsas.",[10,19,20],{},"Essa história é sobre o que outras pessoas fazem com a ferramenta. Este artigo é\nsobre o aplicativo que você fez com ela, e para isso temos uma medição. Entre 12\ne 14 de agosto de 2026 rodamos as mesmas nove verificações externas que qualquer\npessoa pode rodar de graça na nossa página inicial em 30.998 aplicativos no ar,\ne 1.790 deles eram aplicativos v0. Todos os 1.790 tiraram A.",[10,22,23,24,28],{},"Esta é a parte que um ranking entende errado: ",[25,26,27],"strong",{},"esse A diz mais sobre o que havia\npara verificar do que sobre o v0."," Lido como ranking, ele faz do v0 o builder\nmais seguro que medimos. Lido com os seus denominadores, ele descreve frontends\nsem nada por trás, e deixa de descrever o seu no dia em que você conecta um banco\nde dados.",[30,31,33],"h2",{"id":32},"o-v0-é-seguro","O v0 é seguro?",[10,35,36],{},"Em tudo o que conseguimos medir sobre o próprio v0, sim. O único achado dele\npertence ao domínio de onde o v0 serve o seu aplicativo, e nada mais apareceu em\nnenhum dos 1.790, em nenhuma das nove verificações. O que isso não consegue dizer\né como o seu aplicativo se comporta quando guarda dados, porque quase nenhum\ndestes guardava.",[10,38,39],{},"Pense numa prévia do v0 como um gaveteiro num showroom. As gavetas deslizam, as\netiquetas estão no lugar, qualquer um que passe pode puxar uma, e todas as\ngavetas estão vazias. Nossas verificações testaram cada gaveta e não encontraram\nnada em nenhuma, e esse é um relato correto de um gaveteiro vazio.",[10,41,42,43,45,46,53,54,57,58,62],{},"O quanto ele está vazio, os números dizem. Só 17 dos 1.790 citavam um projeto do\nSupabase em algum lugar do código que publicam, e em todos os 17 a nossa\nverificação de banco de dados não obteve uma resposta que pudesse julgar, então a\ncontagem de tabelas legíveis no v0 é zero de zero. Todos os 1.790 eram servidos\nde ",[14,44,16],{},", que a Vercel descreve no seu\n",[47,48,52],"a",{"href":49,"rel":50},"https:\u002F\u002Fgithub.com\u002Fpublicsuffix\u002Flist\u002Fpull\u002F2121",[51],"nofollow","pedido à Public Suffix List","\ncomo o lugar \"onde hospedamos o conteúdo enviado pelos usuários\" do v0. Um\naplicativo que você publica vai para um endereço ",[14,55,56],{},"vercel.app"," ou para um domínio\nseu, onde nada o marca como v0 de fora, então esses não estão na contagem. O\nmétodo e os dados completos estão\n",[47,59,61],{"href":60},"\u002Fresearch\u002Fvibe-coded-app-security-2026","no relatório",".",[10,64,65],{},"Então \"o v0 é seguro?\" são três perguntas:",[67,68,69,76,85],"ol",{},[70,71,72,75],"li",{},[25,73,74],{},"A ferramenta."," O que o v0 verifica no código que escreve, e o que ele se\nrecusa a publicar. Essa parte é da Vercel, e está documentada.",[70,77,78,81,82,84],{},[25,79,80],{},"A prévia."," O gaveteiro no showroom, no seu endereço ",[14,83,16],{},".\nTodos os aplicativos que medimos estavam nesta etapa.",[70,86,87,90],{},[25,88,89],{},"O aplicativo que você enche."," O mesmo código quando guarda os dados dos\nseus clientes, ou roda num domínio seu. Quase nada do que medimos tinha\nchegado até aqui.",[30,92,94],{"id":93},"o-que-a-segurança-do-v0-cobre-antes-de-você-publicar","O que a segurança do v0 cobre antes de você publicar",[10,96,97],{},"Três coisas, e a própria documentação do v0 nomeia cada uma delas.",[10,99,100,103,104,109,110,113,114,116,117,121],{},[25,101,102],{},"Ele relê o código que escreveu."," A\n",[47,105,108],{"href":106,"rel":107},"https:\u002F\u002Fv0.app\u002Fdocs\u002Fsecurity",[51],"página de segurança"," do v0 diz que todo código\ngerado \"passa por uma análise de segurança antes da execução\", e que o v0\n\"analisa o uso de ",[14,111,112],{},"NEXT_PUBLIC_"," e avisa os usuários sobre possíveis riscos de\nsegurança\". ",[14,115,112],{}," é o prefixo que diz ao Next.js, o framework em que o\nv0 escreve, para colocar um valor no código que todo visitante baixa.\n",[47,118,120],{"href":119},"\u002Fblog\u002Fvite-and-next-public-env-vars","O que esse prefixo faz com uma chave"," tem\num artigo próprio.",[10,123,124,127,128,133],{},[25,125,126],{},"Ele recusa alguns deploys."," Em\n",[47,129,132],{"href":130,"rel":131},"https:\u002F\u002Fvercel.com\u002Fblog\u002Fv0-vibe-coding-securely",[51],"agosto de 2025"," a Vercel\nescreveu que o v0 tinha bloqueado mais de 17.000 deploys nos 30 dias anteriores\nsó por segredos expostos, e mais de 100.000 deploys inseguros desde o\nlançamento. São números da Vercel sobre o bloqueio da Vercel, que vale para\ndeploys na Vercel. Parte do nosso zero pode ser obra desse bloqueio. De fora, não\ndá para saber quanto.",[10,135,136,139,140,142,143,146],{},[25,137,138],{},"A integração com o Supabase põe o prefixo no lugar certo."," Conectada pelo\nVercel Marketplace, ela adiciona uma dúzia de variáveis de ambiente, e só duas\nlevam ",[14,141,112],{},": o endereço do projeto e a chave publicável, as duas feitas\npara ser públicas. ",[14,144,145],{},"SUPABASE_SECRET_KEY"," e a senha do banco ficam sem ele, no\nservidor.",[148,149],"diagram",{"alt":150,"caption":151,"src":152},"Doze linhas de configurações dentro de uma caixa. Dez têm valores mascarados e ficam na caixa. Duas levam a etiqueta NEXT_PUBLIC_ e valores legíveis, e setas levam essas duas por cima de uma parede tracejada até um visitante do lado de fora.","A integração com o Supabase adiciona doze variáveis. Duas chegam a todo visitante, e as duas devem chegar: o endereço do projeto e a chave publicável.","\u002Fblog\u002Fis-v0-safe\u002Ftwo-of-twelve-1600x720.png",[154,155,157],"callout",{"type":156},"note",[10,158,159,160,62],{},"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",[47,161,163],{"href":162},"\u002Fsecurity-scanner","Escanear seu aplicativo",[30,165,167],{"id":166},"por-que-falta-cabeçalho-de-segurança-numa-prévia-do-v0","Por que falta cabeçalho de segurança numa prévia do v0",[10,169,170],{},"Porque quem os define é o domínio de prévias do v0, todo aplicativo nele recebe a\nmesma resposta, e de dentro de uma prévia você não consegue mudar isso.",[10,172,173],{},"Cabeçalhos de segurança são instruções que um site manda com cada página: use\nsempre HTTPS, não deixe outro site mostrar esta página dentro da dele, não tente\nadivinhar que tipo de arquivo é este. Quem serve a página é quem manda. As\nprévias que abrimos em 3 de outubro de 2026 mandavam um dos cinco que a nossa\nverificação procura, o que obriga o uso de HTTPS, e nenhum dos outros quatro.\nEsse é o achado em todos os 1.790 aplicativos v0, e é o único.",[10,175,176,177,180,181,185],{},"O showroom decide as próprias portas e alarmes, e você não consegue refazer a\nfiação deles para um único gaveteiro do salão. Assim que você publica, o\ngaveteiro está no seu escritório, e os cabeçalhos são uma configuração no\n",[14,178,179],{},"vercel.json"," ou na sua configuração do Next.js.\n",[47,182,184],{"href":183},"\u002Fblog\u002Fmissing-security-headers","O que cada cabeçalho faz, e os dois que não custam nada",",\né outro artigo.",[30,187,189],{"id":188},"uma-prévia-do-vusercontentnet-é-pública","Uma prévia do vusercontent.net é pública?",[10,191,192],{},"Trate como pública. Qualquer pessoa com o endereço consegue abrir, e endereços\ncirculam.",[10,194,195,196,201,202,205],{},"Cada uma das 1.790 abriu para nós sem login, e não precisamos adivinhar nenhuma:\nos endereços vieram de um arquivo público da web que já tinha guardado uma cópia\nde cada uma. As\n",[47,197,200],{"href":198,"rel":199},"https:\u002F\u002Fv0.app\u002Fdocs\u002Fsharing",[51],"configurações de compartilhamento"," do v0 decidem\nquem pode ver o seu ",[25,203,204],{},"chat",": privado por padrão, depois a sua equipe, qualquer\num com o link, ou qualquer um na web. A documentação não diz que essas\nconfigurações chegam até a prévia.",[10,207,208,209,211],{},"Então uma prévia é o gaveteiro no showroom. Serve para mostrar o design a alguém\ne não serve para os documentos de verdade de ninguém. A Vercel colocou\n",[14,210,16],{}," na Public Suffix List em setembro de 2024, o que faz os\nnavegadores tratarem cada prévia como um site separado, então uma prévia não\nconsegue definir cookies para todas as outras. Isso mantém as prévias separadas\numas das outras, e não faz nada para manter a sua privada.",[10,213,214,215,217,218,223],{},"Se você está aqui porque alguém mandou um link do ",[14,216,16],{},": o domínio é\nda Vercel, e a página nele foi feita por quem a pediu num prompt. Em 1º de julho\nde 2025 a\n",[47,219,222],{"href":220,"rel":221},"https:\u002F\u002Fwww.okta.com\u002Fblog\u002Fthreat-intelligence\u002Fokta-observes-v0-ai-tool-used-to-build-phishing-sites\u002F",[51],"Okta relatou","\natacantes usando o v0 para construir cópias de páginas de login reais, e a\nVercel restringiu o acesso às que encontrou. Não digite uma senha num formulário\nde login num endereço assim a menos que você estivesse esperando por ele.",[30,225,227],{"id":226},"o-que-muda-quando-você-conecta-o-supabase-ao-v0","O que muda quando você conecta o Supabase ao v0",[10,229,230],{},"Você começa a encher as gavetas, e as verificações que voltaram vazias no v0\npassam a ter algo para verificar.",[10,232,233,234,239],{},"O v0 adiciona o Supabase com um clique e, nas palavras da\n",[47,235,238],{"href":236,"rel":237},"https:\u002F\u002Fv0.app\u002Fdocs\u002Fdatabases",[51],"própria documentação",", \"pode gerar e executar\nSQL. Isso permite criar, atualizar e apagar tabelas\". É assim que as suas\ntabelas nascem. Cada tabela é uma gaveta, e a Row Level Security é a fechadura\ndela: uma configuração por tabela que decide quais linhas a chave publicável da\nsua página pode ler. Essa chave foi feita para ser pública, então a fechadura é\na única coisa que decide o que um desconhecido recebe.",[10,241,242],{},"O Supabase põe essa fechadura por padrão nas tabelas criadas no Table Editor\ndele, e deixa de fora nas tabelas criadas rodando SQL, que é como o v0 as cria.",[148,244],{"alt":245,"caption":246,"src":247},"Duas faixas. Na de cima, um ícone de grade cria três tabelas, cada uma com um cadeado fechado ao lado. Na de baixo, um ícone de terminal com o logo do v0 ao lado cria três tabelas, cada uma com o cadeado aberto e desenhado em vermelho.","Uma tabela criada no Table Editor do Supabase chega trancada. Uma tabela criada rodando SQL, que é como o v0 as cria, chega com o cadeado aberto.","\u002Fblog\u002Fis-v0-safe\u002Ftwo-ways-to-make-a-table-1600x620.png",[10,249,250,251,255,256,259,260,264],{},"Foi aí que caíram os achados graves em todos os outros builders. Dos 3.553\naplicativos Lovable cujo banco conseguimos consultar, 2.017 entregaram linhas a\numa requisição sem login, e ",[47,252,254],{"href":253},"\u002Fblog\u002Fis-lovable-safe","os números do Lovable"," são a\ncara dos resultados de um builder quando já há documentos nas gavetas. Uma\nfechadura que qualquer chave abre também não é fechadura: uma política que diz\n",[14,257,258],{},"using (true)"," deixa todo mundo passar enquanto o painel mostra a tabela como\nprotegida.\n",[47,261,263],{"href":262},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","A RLS está ligada e a sua tabela continua pública","\nconta a história inteira.",[10,266,267,268,62],{},"Se os seus dados ficam atrás de rotas que o seu próprio código de servidor\nresponde, a mesma pergunta vale para essas rotas:\n",[47,269,271],{"href":270},"\u002Fblog\u002Fopen-api-endpoint-exposed","o que significa um endpoint de API aberto",[30,273,275],{"id":274},"o-que-muda-quando-você-publica-ou-faz-o-deploy-por-conta-própria","O que muda quando você publica ou faz o deploy por conta própria",[10,277,278],{},"O gaveteiro sai do showroom para o seu escritório, e as decisões que o domínio\ndo v0 tomava passam a ser suas.",[10,280,281,282,287,288,290],{},"Publicar pelo v0 cria um projeto na Vercel e pergunta três coisas, segundo\n",[47,283,286],{"href":284,"rel":285},"https:\u002F\u002Fv0.app\u002Fdocs\u002Fdeployments",[51],"a documentação de deploys do v0",": o nome do\nprojeto, quem pode acessar o aplicativo publicado, e o domínio, um endereço\n",[14,289,56],{}," ou um seu. Vá devagar na segunda. As opções que você vê dependem do\nseu plano, e deixar o aplicativo só para a sua equipe ou atrás de uma senha até\nvocê ter verificado mantém desconhecidos de fora enquanto você olha.",[10,292,293],{},"Três coisas passam para você quando publica:",[295,296,297,303,311],"ul",{},[70,298,299,302],{},[25,300,301],{},"Os cabeçalhos."," As portas e alarmes do escritório agora quem configura é\nvocê.",[70,304,305,308,309,62],{},[25,306,307],{},"As variáveis de ambiente."," Elas ficam nas configurações do seu projeto, e é\nnessa lista que uma chave recebe ou não o prefixo ",[14,310,112],{},[70,312,313,316],{},[25,314,315],{},"A verificação do seu deploy, se você sair da Vercel."," A Vercel descreve o\nbloqueio dela como algo que barra deploys na Vercel, então o código que você\nbaixa e hospeda em outro lugar sai sem essa verificação.",[10,318,319,320,324],{},"De um jeito ou de outro, você saiu da amostra que medimos. Um aplicativo v0 no\npróprio domínio com um banco de dados por trás tem mais em comum com os\n",[47,321,323],{"href":322},"\u002Fblog\u002Fis-bolt-safe","aplicativos Bolt que medimos"," do que com estas 1.790\nprévias.",[30,326,328],{"id":327},"como-verificar-o-seu-próprio-aplicativo-v0","Como verificar o seu próprio aplicativo v0",[10,330,331],{},"Cinco coisas, e as três primeiras só passam a importar depois que você conectou\num banco de dados ou publicou. Use uma janela anônima, para que o seu próprio\nlogin não responda por um desconhecido.",[67,333,334,346,352,358,364],{},[70,335,336,339,340,342,343,345],{},[25,337,338],{},"Leia as suas variáveis de ambiente."," No v0 elas ficam no menu do projeto,\nem Settings, Environment Variables. Tudo que começa com ",[14,341,112],{}," está no\ncódigo que todo visitante baixa. O endereço de um projeto e uma chave\npublicável ficam bem ali. Uma chave que gera cobrança para você,\n",[14,344,145],{}," e qualquer coisa que guarde uma senha, nunca. Se alguma\ndelas já levou o prefixo, faça a rotação com o provedor primeiro, porque o\nvalor antigo continua funcionando até você fazer isso.",[70,347,348,351],{},[25,349,350],{},"Leia a fechadura de cada tabela."," No Supabase, abra Authentication →\nPolicies e percorra a lista. Uma tabela com a Row Level Security desligada é\nlegível por qualquer um que tenha o endereço do seu projeto, e esse endereço\nestá na sua página. Uma política que libera tudo para todos conta como\ndesligada.",[70,353,354,357],{},[25,355,356],{},"Escolha quem pode ver quando publicar."," Só a sua equipe, ou uma senha, até\nas duas primeiras estarem feitas.",[70,359,360,363],{},[25,361,362],{},"Defina os seus cabeçalhos quando o domínio for seu."," Dois deles são uma\nlinha cada.",[70,365,366,369,370,62],{},[25,367,368],{},"Depois olhe de fora."," O nosso escaneamento roda as nove verificações\ncontra o endereço publicado como um desconhecido faria, leva uns 20 segundos e\nnão pede conta: ",[47,371,372],{"href":162},"escaneie seu aplicativo de graça",[10,374,375,376,62],{},"Um escaneamento de fora não vê o código que o v0 escreveu, nem o chat em que\nvocê o escreveu, nem uma tabela que as suas páginas nunca mencionam. As\nverificações do v0 veem o código por dentro e não veem o que um desconhecido\nrecebe do endereço. Use as do v0 enquanto constrói, olhe de fora depois de\npublicar e, se as duas discordarem sobre uma tabela ser legível, fique com a\nresposta de fora, porque é ela que um desconhecido recebe. A versão em\nlinguagem simples para esta plataforma é\n",[47,377,379],{"href":378},"\u002Fis-your-v0-app-safe","o seu aplicativo v0 é seguro?",[30,381,383],{"id":382},"para-continuar-assim-depois-de-publicar","Para continuar assim depois de publicar",[10,385,386,389],{},[25,387,388],{},"Um A numa prévia descreve uma prévia."," No dia em que você conecta um banco de\ndados ou publica no seu próprio domínio, a sua nota pode mudar, e nada na sua\ntela avisa que mudou.",[10,391,392],{},[25,393,394,395,399],{},"O ",[47,396,398],{"href":397},"\u002Fpricing","Reeve Monitor"," roda as nove verificações de novo para você:",[295,401,402,405,408,415],{},[70,403,404],{},"as nove verificações a cada hora, em até três aplicativos",[70,406,407],{},"se o aplicativo está no ar, a cada 60 segundos",[70,409,410,411,414],{},"uma mensagem quando um resultado ",[25,412,413],{},"muda",", para que uma tabela ou chave nova não espere você olhar",[70,416,417],{},"um relatório mensal do que ele viu",[10,419,420],{},"O Monitor custa $12 por mês no preço de tabela, com sete dias grátis antes de\ncobrar. A página de preços às vezes fica abaixo do número daqui e nunca acima.",[10,422,423],{},[25,424,425,426,430],{},"Se o seu aplicativo v0 guarda os dados no Supabase, o\n",[47,427,429],{"href":428},"\u002Fsupabase-backups","Reeve Care"," guarda uma cópia do seu banco do Supabase.",[295,432,433,436,439,442,445],{},[70,434,435],{},"uma cópia criptografada toda noite, guardada onde o seu projeto não alcança",[70,437,438],{},"cada cópia verificada antes de valer, com a contagem das linhas de cada tabela",[70,440,441],{},"uma restauração com um clique quando você precisar",[70,443,444],{},"os seus arquivos enviados também, assim que você conectar uma credencial de Storage",[70,446,447],{},"tudo o que o Monitor faz",[10,449,450],{},"O Care custa $49 por mês no preço de tabela para um aplicativo, com os mesmos\nsete dias grátis.",[10,452,453,454,458],{},"A documentação do v0 diz que ele pode apagar tabelas, além de criar, e nenhuma\ndas nove verificações acima traria de volta as linhas de uma delas.\n",[47,455,457],{"href":456},"\u002Fblog\u002Fai-agent-deleted-my-database","O dia em que um agente de IA apagou um banco de dados de produção","\nmostra como isso fica visto de dentro.",[30,460,462],{"id":461},"o-que-fazer-esta-semana","O que fazer esta semana",[464,465,466],"key-takeaways",{},[295,467,468,471,477,480,483],{},[70,469,470],{},"Se o seu aplicativo v0 ainda é uma prévia, trate o endereço como público e deixe dados de pessoas reais de fora.",[70,472,473,474,476],{},"Antes de conectar um banco de dados, decida onde fica cada chave: ",[14,475,112],{}," para o endereço do projeto e a chave publicável, e nada perto do navegador para todo o resto.",[70,478,479],{},"Depois de conectar o Supabase, leia a política de cada tabela que o v0 criou, e trate como desligada uma que libera tudo para todos.",[70,481,482],{},"Publique só para a sua equipe ou atrás de uma senha até isso estar feito, e depois verifique o endereço publicado de fora.",[70,484,485],{},"Guarde uma cópia do seu banco de dados onde o v0 e o seu projeto não alcançam, e confira se a cópia restaura.",[10,487,488,489,493],{},"Comece pelas variáveis de ambiente, porque são elas que decidem o que todo\nvisitante baixa. Se você ainda está escolhendo um builder,\n",[47,490,492],{"href":491},"\u002Fblog\u002Fsafest-ai-app-builder","qual builder de aplicativos com IA é o mais seguro","\ncoloca os cinco lado a lado.",{"title":495,"searchDepth":496,"depth":496,"links":497},"",3,[498,500,501,502,503,504,505,506,507],{"id":32,"depth":499,"text":33},2,{"id":93,"depth":499,"text":94},{"id":166,"depth":499,"text":167},{"id":188,"depth":499,"text":189},{"id":226,"depth":499,"text":227},{"id":274,"depth":499,"text":275},{"id":327,"depth":499,"text":328},{"id":382,"depth":499,"text":383},{"id":461,"depth":499,"text":462},"Noções de segurança","\u002Fblog\u002Fis-v0-safe\u002Fcover-1200x630.png","Um gaveteiro com o logo do v0 e uma gaveta vazia puxada, ao lado de outro gaveteiro com todas as gavetas trancadas.","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.",false,"md",[515,517,520,523,526,529],{"q":33,"a":516},"No que conseguimos medir, o v0 saiu mais limpo que qualquer outro builder escaneado. Os 1.790 aplicativos v0 no ar tiraram A, e o único achado que tinham em comum era uma configuração de cabeçalhos do navegador no domínio de onde o v0 serve as prévias. Só 17 deles citavam um banco de dados, porém, e nenhum desses 17 deu resposta à nossa verificação de banco de dados, então o A descreve sobretudo frontends sem nada por trás. Assim que você conecta o Supabase ou publica no seu próprio domínio, as verificações que decidem uma nota grave passam a valer para você.",{"q":518,"a":519},"Os aplicativos do v0 são seguros por padrão?","As partes que o v0 controla estão em bom estado. A documentação dele diz que o código gerado passa por uma análise de segurança antes de rodar e que ele avisa sobre o uso arriscado do prefixo NEXT_PUBLIC_, e em agosto de 2025 a Vercel disse que o v0 tinha bloqueado mais de 17.000 deploys em 30 dias por segredos expostos. O que nenhum padrão decide é a fechadura das suas tabelas. O Supabase não liga a Row Level Security nas tabelas criadas rodando SQL, que é como o v0 as cria, então leia a política de cada tabela depois de conectar um banco de dados.",{"q":521,"a":522},"Uma URL de prévia do vusercontent.net é pública?","Trate como pública. Cada uma das 1.790 prévias do v0 que escaneamos abriu sem login, e encontramos os endereços delas num arquivo público da web. As configurações de compartilhamento do v0 controlam quem pode ver o seu chat, e a documentação não diz que elas valem para a prévia. Deixe dados de pessoas reais fora de uma prévia e, ao publicar, escolha visibilidade só para a equipe ou com senha até o aplicativo estar pronto para desconhecidos.",{"q":524,"a":525},"O vusercontent.net é seguro?","O domínio é real e pertence à Vercel, que o usa para hospedar o que as pessoas geram com o v0. Mas a página num endereço qualquer foi feita por quem a pediu num prompt, e em julho de 2025 a Okta relatou atacantes usando o v0 para construir cópias de páginas de login. A Vercel restringiu o acesso às que encontrou. Se um link que você não esperava abrir um formulário de login num endereço do vusercontent.net, não digite uma senha nele.",{"q":527,"a":528},"O que muda quando eu conecto o Supabase ao v0?","Agora há dados por trás do seu frontend, então as verificações que voltaram vazias nos aplicativos v0 passam a ter algo para verificar. O v0 pode rodar SQL para criar tabelas, e o Supabase não liga a Row Level Security nas tabelas criadas assim. A sua chave publicável foi feita para ficar na página, então a política de cada tabela é a única coisa que decide o que um desconhecido pode ler. Dos 3.553 aplicativos Lovable cujo banco conseguimos consultar, 2.017 entregaram linhas a uma requisição sem login.",{"q":530,"a":531},"O que muda quando eu mesmo faço o deploy do código do v0?","Três coisas passam a ser suas. Os cabeçalhos de segurança que o domínio de prévias do v0 escolhia viram uma configuração no vercel.json ou na sua configuração do Next.js. As suas variáveis de ambiente, e quais delas levam o prefixo NEXT_PUBLIC_, ficam no seu próprio projeto. E o código que você baixa e hospeda fora da Vercel não passa mais pela verificação de deploy que a Vercel descreve para o v0. Olhe o endereço publicado de fora assim que ele estiver no ar.","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",[534,535,536,537,538,539,540,541,542],"segurança do v0","o v0 é seguro","segurança v0.dev","é seguro usar o v0","segurança vercel v0","aplicativos v0 são seguros","segurança de aplicativos v0","segurança do deploy no v0","vusercontent.net é seguro",{},true,"\u002Fblog\u002Fis-v0-safe","2026-10-03",{"title":5,"description":511},"blog\u002Fis-v0-safe",[550,551,552],"Em segurança, o v0 saiu mais limpo que qualquer outro builder que medimos: os 1.790 aplicativos v0 no ar que escaneamos tiraram A, e o único achado que tinham em comum é uma configuração de cabeçalhos no domínio de onde o v0 os serve.","Isso diz sobretudo o que esses aplicativos são. Só 17 dos 1.790 citavam um banco de dados, e nenhum desses 17 deu à nossa verificação de banco de dados uma resposta que ela pudesse julgar.","Conecte o Supabase, ou publique num domínio próprio, e as verificações que voltaram vazias passam a ter algo para verificar.","Ft1PiTp4Otxzk5ba30V07XpdfpdOB5xR0fIZt1JjfZ4",[555,561,567,573,579,585,591,597,603,604,609,615,621,627,634,640,646,651,656,662,668,674,679,685,691,696,702,708,714,720,726,732,737,743,749,755,761,767,773,778,784,790,796,802,808,814,820,826,832,838,844,850,856,861,867,872,878,884,889,894,900],{"path":556,"title":557,"description":558,"published":559,"category":508,"image":560,"draft":512},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" ao enviar","\"New row violates row-level security policy for table objects\" quer dizer que o seu envio não tem regra insert. Deixar o bucket público não cria nenhuma.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":562,"title":563,"description":564,"published":565,"category":508,"image":566,"draft":512},"\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":568,"title":569,"description":570,"published":571,"category":508,"image":572,"draft":512},"\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":574,"title":575,"description":576,"published":577,"category":508,"image":578,"draft":512},"\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":580,"title":581,"description":582,"published":583,"category":508,"image":584,"draft":512},"\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":586,"title":587,"description":588,"published":589,"category":508,"image":590,"draft":512},"\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":592,"title":593,"description":594,"published":595,"category":508,"image":596,"draft":512},"\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":598,"title":599,"description":600,"published":601,"category":508,"image":602,"draft":512},"\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":545,"title":5,"description":511,"published":546,"category":508,"image":532,"draft":512},{"path":322,"title":605,"description":606,"published":607,"category":508,"image":608,"draft":512},"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":610,"title":611,"description":612,"published":613,"category":508,"image":614,"draft":512},"\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":616,"title":617,"description":618,"published":619,"category":508,"image":620,"draft":512},"\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":622,"title":623,"description":624,"published":625,"category":508,"image":626,"draft":512},"\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":628,"title":629,"description":630,"published":631,"category":632,"image":633,"draft":512},"\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":635,"title":636,"description":637,"published":638,"category":632,"image":639,"draft":512},"\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":641,"title":642,"description":643,"published":644,"category":632,"image":645,"draft":512},"\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":647,"title":648,"description":649,"published":644,"category":508,"image":650,"draft":512},"\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":270,"title":652,"description":653,"published":654,"category":508,"image":655,"draft":512},"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":657,"title":658,"description":659,"published":660,"category":508,"image":661,"draft":512},"\u002Fblog\u002Flovable-security-scan","Escaneamento de segurança do Lovable: o que ele não prova","Escaneamento de segurança do Lovable: o que o Quick scan e o Deep scan checam, quando cada um roda, e a única coisa que nenhum escaneamento por dentro prova.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":663,"title":664,"description":665,"published":666,"category":632,"image":667,"draft":512},"\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":669,"title":670,"description":671,"published":672,"category":508,"image":673,"draft":512},"\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":253,"title":675,"description":676,"published":677,"category":508,"image":678,"draft":512},"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":680,"title":681,"description":682,"published":683,"category":508,"image":684,"draft":512},"\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":686,"title":687,"description":688,"published":689,"category":508,"image":690,"draft":512},"\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":119,"title":692,"description":693,"published":694,"category":508,"image":695,"draft":512},"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":697,"title":698,"description":699,"published":700,"category":508,"image":701,"draft":512},"\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":703,"title":704,"description":705,"published":706,"category":508,"image":707,"draft":512},"\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":709,"title":710,"description":711,"published":712,"category":508,"image":713,"draft":512},"\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":715,"title":716,"description":717,"published":718,"category":632,"image":719,"draft":512},"\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":721,"title":722,"description":723,"published":724,"category":632,"image":725,"draft":512},"\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":727,"title":728,"description":729,"published":730,"category":632,"image":731,"draft":512},"\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":491,"title":733,"description":734,"published":735,"category":508,"image":736,"draft":512},"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":738,"title":739,"description":740,"published":741,"category":508,"image":742,"draft":512},"\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":744,"title":745,"description":746,"published":747,"category":508,"image":748,"draft":512},"\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":750,"title":751,"description":752,"published":753,"category":508,"image":754,"draft":512},"\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":756,"title":757,"description":758,"published":759,"category":508,"image":760,"draft":512},"\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":762,"title":763,"description":764,"published":765,"category":508,"image":766,"draft":512},"\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":768,"title":769,"description":770,"published":771,"category":508,"image":772,"draft":512},"\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":183,"title":774,"description":775,"published":776,"category":508,"image":777,"draft":512},"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":779,"title":780,"description":781,"published":782,"category":508,"image":783,"draft":512},"\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":785,"title":786,"description":787,"published":788,"category":508,"image":789,"draft":512},"\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":791,"title":792,"description":793,"published":794,"category":632,"image":795,"draft":512},"\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":797,"title":798,"description":799,"published":800,"category":508,"image":801,"draft":512},"\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":803,"title":804,"description":805,"published":806,"category":632,"image":807,"draft":512},"\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":809,"title":810,"description":811,"published":812,"category":508,"image":813,"draft":512},"\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":815,"title":816,"description":817,"published":818,"category":508,"image":819,"draft":512},"\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":821,"title":822,"description":823,"published":824,"category":508,"image":825,"draft":512},"\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":827,"title":828,"description":829,"published":830,"category":508,"image":831,"draft":512},"\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":833,"title":834,"description":835,"published":836,"category":632,"image":837,"draft":512},"\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":839,"title":840,"description":841,"published":842,"category":632,"image":843,"draft":512},"\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":845,"title":846,"description":847,"published":848,"category":508,"image":849,"draft":512},"\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":851,"title":852,"description":853,"published":854,"category":508,"image":855,"draft":512},"\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":456,"title":857,"description":858,"published":859,"category":632,"image":860,"draft":512},"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":862,"title":863,"description":864,"published":865,"category":508,"image":866,"draft":512},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Qualquer um consegue ler seu banco Supabase? Testamos 3.680 apps","Qualquer um consegue ler seu banco de dados Supabase sem fazer login? Escaneamos 30.998 apps no ar criadas com builders de IA e medimos quantas dizem que sim.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":868,"title":869,"description":870,"published":865,"category":508,"image":871,"draft":512},"\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":873,"title":874,"description":875,"published":876,"category":508,"image":877,"draft":512},"\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":879,"title":880,"description":881,"published":882,"category":632,"image":883,"draft":512},"\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":262,"title":885,"description":886,"published":887,"category":508,"image":888,"draft":512},"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":890,"title":891,"description":892,"published":887,"category":632,"image":893,"draft":512},"\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":895,"title":896,"description":897,"published":898,"category":632,"image":899,"draft":512},"\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":901,"title":902,"description":903,"published":898,"category":508,"image":904,"draft":512},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Quais chaves de API são seguras no navegador e quais não são","Sua chave anon do Supabase foi feita para ser pública. Sua chave service_role não, e ela ignora todas as regras que você criar. Como diferenciar as duas.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1791705963243]