[{"data":1,"prerenderedAt":785},["ShallowReactive",2],{"blog-pt-base44-source-maps":3,"blog-index-pt":543},{"id":4,"title":5,"body":6,"category":501,"cover":502,"coverAlt":503,"description":504,"draft":505,"extension":506,"faq":507,"image":523,"keywords":524,"meta":532,"navigation":533,"ogTitle":5,"path":534,"published":535,"seo":536,"stem":537,"tldr":538,"updated":535,"__hash__":542},"blog_pt\u002Fblog\u002Fbase44-source-maps.md","Segurança no Base44: o que um scan aponta e o que é seu para corrigir",{"type":7,"value":8,"toc":490},"minimark",[9,13,21,24,29,32,41,170,173,176,179,183,186,198,206,212,215,218,221,229,233,236,243,251,258,266,270,273,289,295,305,310,314,317,344,347,430,434,467,470,478],[10,11,12],"p",{},"Você escaneou seu app do Base44 e o relatório voltou com um B e três linhas\nâmbar embaixo: cabeçalhos de segurança faltando, uma API aberta a qualquer\nsite, e o seu código-fonte original publicado. Ou alguém técnico olhou por você\ne disse as mesmas três coisas com uma voz mais preocupada. Para um app cujo\ncódigo você nunca leu, a última é a que mais pesa.",[10,14,15,16,20],{},"Aqui está a parte que guia após guia sobre segurança no Base44 erra: ",[17,18,19],"strong",{},"quase\ntoda linha desse relatório fala do Base44."," Três dos quatro achados que\naparecem em quase todo app são definidos pela plataforma, para todos os apps\nque ela hospeda. E um dos três é uma frase que o nosso próprio scan formula\nerrado. Este artigo existe porque voltamos para ler o que ele tinha\nencontrado.",[10,22,23],{},"Pense no seu app como um apartamento em um prédio que pertence ao Base44. Um\nscan lê o prédio da rua. A fechadura da porta de entrada, a placa em cima, a\nregra sobre quem pode olhar pelas janelas: quem decidiu isso foi o dono do\nprédio, e todo apartamento compartilha. O que você levou para dentro é uma\nlista mais curta, e o resto deste artigo percorre o relatório linha por linha\npara dizer o que é de quem.",[25,26,28],"h2",{"id":27},"o-que-um-scan-de-segurança-no-base44-encontra-em-quase-todo-app","O que um scan de segurança no Base44 encontra em quase todo app",[10,30,31],{},"Três achados em quase todos, um quarto em cerca da metade, e os quatro\ndecididos pelo Base44.",[10,33,34,35,40],{},"Em agosto de 2026 rodamos\n",[36,37,39],"a",{"href":38},"\u002Fresearch\u002Fvibe-coded-app-security-2026","as mesmas nove verificações"," em\n30.998 apps vibe-coded no ar, 5.438 deles publicados no Base44. Todos os 5.438\nestavam sem cabeçalhos de segurança. 5.417 responderam a uma requisição vinda\nde um site inventado com um cabeçalho CORS curinga. 3.229 deles, 59%, serviam\num source map. 2.705 tinham um endereço, nomeado no próprio código do app, que\nrespondia a uma requisição sem login e devolvia dados.",[42,43,44,69],"table",{},[45,46,47],"thead",{},[48,49,50,54,57,60,63,66],"tr",{},[51,52,53],"th",{},"Ferramenta",[51,55,56],{},"Apps",[51,58,59],{},"Source map publicado",[51,61,62],{},"Achado CORS",[51,64,65],{},"Uma chave no bundle",[51,67,68],{},"Nota D ou F",[70,71,72,93,113,133,153],"tbody",{},[48,73,74,78,81,84,87,90],{},[75,76,77],"td",{},"Base44",[75,79,80],{},"5.438",[75,82,83],{},"3.229 (59%)",[75,85,86],{},"5.418 (99%)",[75,88,89],{},"103 (2%)",[75,91,92],{},"2",[48,94,95,98,101,104,107,110],{},[75,96,97],{},"Lovable",[75,99,100],{},"18.554",[75,102,103],{},"225 (1%)",[75,105,106],{},"8 (menos de 1%)",[75,108,109],{},"822 (4%)",[75,111,112],{},"407",[48,114,115,118,121,124,127,130],{},[75,116,117],{},"Replit",[75,119,120],{},"3.042",[75,122,123],{},"168 (6%)",[75,125,126],{},"1.129 (37%)",[75,128,129],{},"219 (7%)",[75,131,132],{},"9",[48,134,135,138,141,144,147,150],{},[75,136,137],{},"Bolt",[75,139,140],{},"1.123",[75,142,143],{},"13 (1%)",[75,145,146],{},"5 (menos de 1%)",[75,148,149],{},"75 (7%)",[75,151,152],{},"15",[48,154,155,158,161,164,166,168],{},[75,156,157],{},"v0",[75,159,160],{},"1.790",[75,162,163],{},"0",[75,165,163],{},[75,167,163],{},[75,169,163],{},[10,171,172],{},"Cada porcentagem é sobre os apps em que aquela verificação conseguiu resposta,\ne é por isso que as bases diferem um pouco da contagem de apps. Uma\nverificação que não conseguiu alcançar um app deixa esse app de fora. Ele\nnunca conta como limpo.",[10,174,175],{},"Leia a linha do Base44 contra a linha do Lovable. No Lovable, os dois\nprimeiros achados quase nunca aparecem, porque a hospedagem do Lovable define\nos dois ao contrário. No Base44 eles aparecem quase sempre. Uma coluna tão\nuniforme em milhares de apps cujos donos nunca conversaram entre si é a cara\nde uma configuração de plataforma vista de fora. Ninguém escolheu isso no\npróprio app.",[10,177,178],{},"As duas últimas colunas são decididas dentro de cada app, e contam a outra\nmetade. Uma chave no código comprimido apareceu em 2% dos apps do Base44\ncontra 4% dos do Lovable, e 2 apps do Base44 entre 5.438 tiraram D, contra 407\napps do Lovable entre 18.554. Esses dois apps do Base44 estão na última seção.",[25,180,182],{"id":181},"o-achado-de-source-map-em-um-app-do-base44-é-o-selo","O achado de source map em um app do Base44 é o selo",[10,184,185],{},"Todo source map que respondia nos apps do Base44 que reabrimos pertencia ao\nscript do selo do Base44. Nenhum deles continha o código do dono.",[10,187,188,189,192,193,197],{},"Um ",[17,190,191],{},"source map"," é um arquivo que a ferramenta de build escreve ao lado do\nJavaScript comprimido que o seu site serve. Ele guarda os arquivos originais,\nseus nomes e cada comentário, para que um erro possa apontar a linha que você\nescreveu em vez do caractere 48.000 de uma única linha enorme. Quando o map\nestá publicado, qualquer pessoa que aperte F12 lê o projeto como ele aparecia\nno editor, e\n",[36,194,196],{"href":195},"\u002Fblog\u002Fsource-maps-exposed-in-production","nosso artigo anterior"," explica o que\nisso custa em um app cujo map é o seu.",[10,199,200,201,205],{},"No Base44 o map é de outra pessoa. Em 16 de setembro de 2026 voltamos a 30\napps que o nosso scan de agosto tinha marcado e lemos o que cada map continha.\nEm 27 deles o único map que respondia era ",[202,203,204],"code",{},"\u002Fstatic\u002Fjs\u002Fbadge.js.map",", o map do\npequeno script que desenha o selo do Base44 na página, e o que ele revela é o\ncódigo do Base44 para esse selo. Nos outros 3, nenhum map respondeu. Em nenhum\ndos 30 um map cobria os arquivos do dono. Esses arquivos saíram comprimidos e\nsem map em todos os apps que abrimos, o primeiro arquivo que a página carrega e\ncada pedaço que ela carrega depois.",[207,208],"diagram",{"alt":209,"caption":210,"src":211},"Dois painéis. À esquerda, sob o logo do Base44, cada arquivo de script do app tem um anel tracejado onde estaria um map, e só o script do selo tem um map, que leva a um pequeno logo do Base44. À direita, sob o logo do Lovable, o script principal do app tem um map, e o map se abre em uma pasta de arquivos legíveis.","Em um app do Base44 o único map que responde pertence ao script do selo, e ele contém o código do Base44. Em um app do Lovable o map são os próprios arquivos do dono.","\u002Fblog\u002Fbase44-source-maps\u002Fwhose-map-answers-1600x720.png",[10,213,214],{},"Então os 59% contam outra coisa que não código publicado. Dos 30 apps\nmarcados, 27 dos 28 que respondiam ainda carregam o script do selo na página,\ne de 30 apps que nunca foram marcados, 29 não carregam. O número que se lê\ncomo «três em cada cinco apps do Base44 publicam seu código» está mais perto de\n«três em cada cinco apps do Base44 mostram o selo».",[10,216,217],{},"Isso deixa uma linha do nosso próprio relatório pela qual responder. Ela diz\n«Seu código-fonte original está publicado», e em um app do Base44 ela é\nverdadeira para um arquivo e errada sobre o seu app. A verificação fez o que\nfoi construída para fazer: seguir o endereço no fim de um script e contar um\nmap que responde. Aqui o script é do dono do prédio. No Lovable, no Replit e\nno Bolt a mesma linha quer dizer o que diz. De 11 apps marcados dessas\nferramentas que reabrimos, 9 serviam um map das próprias páginas e componentes\ndo dono, e nos outros 2 nenhum map respondia mais.",[10,219,220],{},"O que isso significa para você é que nada seu está nesse map. A verificação\nque vale a pena é a outra: se algo que você colou no app está no arquivo\ncomprimido que todo visitante já recebe. Isso vem mais abaixo.",[10,222,223,224,228],{},"O nosso scan gratuito lê o seu app do Base44 no ar, de fora, todas as nove\nverificações, em uns 20 segundos e sem conta, e escreve «Não foi possível\nverificar» para tudo o que não conseguiu responder, em vez de um sinal de\ncerto: ",[36,225,227],{"href":226},"\u002Fsecurity-scanner","escaneie o seu app",".",[25,230,232],{"id":231},"o-cors-curinga-o-base44-define-e-nada-privado-responde-atrás-dele","O CORS curinga: o Base44 define, e nada privado responde atrás dele",[10,234,235],{},"Você não pode mudá-lo, e nos apps do Base44 que olhamos não há dado privado\natrás dele.",[10,237,238,239,242],{},"O achado é uma linha nas respostas do seu servidor,\n",[202,240,241],{},"Access-Control-Allow-Origin: *",", que diz ao navegador de um visitante que uma\npágina de qualquer outro site pode ler aquela resposta. A documentação do\nBase44 diz de onde ela vem (lida em 16 de setembro de 2026): «Per-app CORS\nconfiguration is not currently available. Base44 manages CORS at the platform\nlevel.» Todo app da plataforma envia essa linha, e foi assim que 5.417 apps de\n5.419 acabaram com o mesmo achado.",[10,244,245,246,250],{},"Se um curinga importa depende do que responde atrás dele, e\n",[36,247,249],{"href":248},"\u002Fblog\u002Fcors-wildcard-security-risk","o artigo mais longo"," explica por quê. A\nversão curta: o cabeçalho chega depois que a resposta já foi enviada, e só um\nnavegador lê esse cabeçalho, então estreitá-lo impediria as páginas de outros\nsites de lerem o seu app, e mais ninguém. O que está atrás dele em um app do\nBase44 é o próprio app, a página, o código comprimido, o selo, e tudo isso\ntodo visitante baixa de qualquer jeito.",[10,252,253,254,257],{},"O quarto achado é onde um curinga importaria. Em 2.705 apps do Base44, cerca\nda metade, um endereço nomeado no código do app respondia a uma requisição sem\nlogin e devolvia dados. Reabrimos 12 deles em 16 de setembro. Em seis, nada\nrespondia mais. Nos outros seis o endereço que respondia era o mesmo toda vez,\n",[202,255,256],{},"\u002Fapi\u002Fconsent\u002Fconfig",", e o que ele devolve são as configurações de\nconsentimento de cookies do app: se um aviso de consentimento está ligado,\nquais regras regionais valem, por quantos meses a resposta fica guardada. É\nconfiguração. Não tem linha de ninguém ali.",[10,259,260,261,265],{},"Os seus dados não viajam por esse caminho no Base44. O seu app pergunta ao\nbackend do Base44, o backend aplica as regras de permissão que você definiu em\ncada tabela, e a resposta volta pela mesma porta. Um scan de fora não consegue\nver essas regras de jeito nenhum, e é por isso que o\n",[36,262,264],{"href":263},"\u002Fis-your-base44-app-safe","guia do Base44"," gasta seu tempo com o que um\nestranho consegue alcançar, e deixa as suas regras com você.",[25,267,269],{"id":268},"o-que-é-seu-em-um-app-do-base44","O que é seu em um app do Base44",[10,271,272],{},"Uma lista curta, e as duas notas D da varredura vieram dela.",[10,274,275,278,279,283,284,288],{},[17,276,277],{},"Uma chave que você colou."," 103 dos 5.438 apps do Base44, 2%, serviam algo\ncom cara de chave no código que todo visitante baixa. 95 deles eram chaves de\nAPI do Google, que\n",[36,280,282],{"href":281},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","normalmente precisam de uma restrição no Google Cloud",",\ne não de rotação. Uma era uma chave secreta do Stripe, e esse app tirou D. O\nBase44 guarda as próprias credenciais no servidor dele, então uma chave no seu\nbundle é uma que você ou a ferramenta adicionou para uma função: um mapa, uma\ntag de análise, um formulário de pagamento.\n",[36,285,287],{"href":286},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Saber de que tipo ela é"," se\nlê em um minuto, e uma secreta é rotacionada onde foi emitida antes de sair do\ncódigo.",[10,290,291,294],{},[17,292,293],{},"As regras de permissão das suas tabelas."," O Base44 chama de data access\nrules, e elas decidem quem pode ler e editar cada tipo de registro. Ninguém de\nfora consegue testá-las, nós incluídos, e esse é o único lugar em que um scan\nexterno tem que deixar um vazio. O próprio scan de segurança do Base44 lê essas\nregras, e a documentação dele diz que o scan está disponível em todos os\nplanos, inclusive o gratuito.",[10,296,297,300,301,304],{},[17,298,299],{},"Tudo o que você conectou por conta própria."," O outro D da varredura era um\napp do Base44 com um projeto Supabase próprio, e dentro dele uma tabela com\nnome de dado pessoal que respondia a uma requisição sem login. Conecte o seu\npróprio banco e as ",[36,302,303],{"href":263},"regras por linha de sempre","\nvalem por inteiro, porque esse projeto responde à internet diretamente.",[207,306],{"alt":307,"caption":308,"src":309},"Um relatório de scan desenhado como seis linhas. As quatro primeiras, cabeçalhos, o globo do CORS, um script com o seu map e um pacote de dados, estão desenhadas apagadas e cada uma termina em um pequeno logo do Base44. As duas últimas, uma chave e uma tabela de banco de dados, estão desenhadas na cor de destaque e cada uma termina em uma pessoa.","Seis linhas que um scan pode imprimir em um app do Base44. As quatro primeiras são definidas pela plataforma para todos os apps nela. As duas últimas são as que um dono pode mudar, e as duas notas D da varredura vieram delas.","\u002Fblog\u002Fbase44-source-maps\u002Fwho-owns-each-line-1600x760.png",[25,311,313],{"id":312},"o-que-você-pode-mudar-de-dentro-do-base44","O que você pode mudar de dentro do Base44",[10,315,316],{},"Dois cabeçalhos, as regras das suas tabelas e as suas chaves. O resto é\ndefinido para todos os apps da plataforma.",[10,318,319,320,323,324,327,328,331,332,335,336,339,340,343],{},"A documentação do Base44 lista o que é seu para ligar (lida em 16 de setembro\nde 2026). No painel do seu app, em Security e depois no ícone de\nconfigurações, você pode ligar dois cabeçalhos de segurança. ",[17,321,322],{},"Prevent\nEmbedding"," define ",[202,325,326],{},"X-Frame-Options",", que impede o seu app de ser mostrado\ndentro da página de outro site. ",[17,329,330],{},"Restrict Browser Features"," define\n",[202,333,334],{},"Permissions-Policy",", que limita o que o seu app pode pedir ao navegador,\ncâmera e localização inclusas. Se as pessoas fazem login no seu app e podem\nfazer algo de consequência com um clique, ligue o primeiro. A mesma página diz\nque ",[202,337,338],{},"Content-Security-Policy"," e ",[202,341,342],{},"Strict-Transport-Security"," «are not\nconfigurable at the individual app level». Isso é a maior parte do achado de\ncabeçalhos, e está fora das suas mãos.",[10,345,346],{},"O próprio scan do Base44 cobre a parte de dentro: problemas de permissão de\ndados, segredos expostos, funções de backend sem verificação de login,\ndependências e, do plano Builder para cima, vulnerabilidades no código. A\ndocumentação dele não menciona source maps nem o cabeçalho CORS, o que é\njusto, porque os dois pertencem à plataforma. Um scan de fora cobre o que é\nentregue ao navegador de um visitante, e em um app do Base44 é ali que a lista\né mais curta.",[42,348,349,362],{},[45,350,351],{},[48,352,353,356,359],{},[51,354,355],{},"O que o relatório diz",[51,357,358],{},"Quem define",[51,360,361],{},"O que fazer",[70,363,364,375,385,396,409,419],{},[48,365,366,369,372],{},[75,367,368],{},"Cabeçalhos de segurança faltando",[75,370,371],{},"Base44, com dois interruptores para você",[75,373,374],{},"Ligue Prevent Embedding se as pessoas fazem login. Deixe o resto.",[48,376,377,380,382],{},[75,378,379],{},"API aberta a qualquer site",[75,381,77],{},[75,383,384],{},"Nada. Olhe em vez disso o que responde atrás dele.",[48,386,387,390,393],{},[75,388,389],{},"Código-fonte original publicado",[75,391,392],{},"O script do selo do Base44",[75,394,395],{},"Nada. O map contém o código do Base44 para o selo.",[48,397,398,401,406],{},[75,399,400],{},"Um endereço responde sem login",[75,402,403,404],{},"Base44, em ",[202,405,256],{},[75,407,408],{},"Leia o que ele devolve. Configurações de consentimento são públicas de propósito.",[48,410,411,413,416],{},[75,412,65],{},[75,414,415],{},"Você",[75,417,418],{},"Rotacione uma chave secreta na origem. Restrinja uma chave do Google.",[48,420,421,424,427],{},[75,422,423],{},"Uma tabela legível",[75,425,426],{},"Você, se conectou o seu próprio banco",[75,428,429],{},"Row Level Security em toda tabela que guarda pessoas.",[25,431,433],{"id":432},"o-que-fazer-agora","O que fazer agora",[435,436,437],"key-takeaways",{},[438,439,440,444,451,454,461,464],"ul",{},[441,442,443],"li",{},"Leia as três linhas de plataforma do seu relatório como do Base44, e depois leia o resto.",[441,445,446,447,450],{},"Aperte F12 no seu app no ar e abra a aba ",[17,448,449],{},"Sources",". Nenhuma pasta com os seus próprios arquivos quer dizer nenhum map do seu código, diga o relatório o que disser.",[441,452,453],{},"Encontre cada chave no app e leia o prefixo dela. Uma secreta é rotacionada onde foi emitida e depois removida do código, nessa ordem.",[441,455,456,457,460],{},"Ligue ",[17,458,459],{},"Prevent Embedding"," em Security se os seus usuários fazem login.",[441,462,463],{},"Abra Data, escolha uma tabela, depois Permissions, e leia a regra de toda tabela que guarda pessoas.",[441,465,466],{},"Se você conectou o seu próprio projeto Supabase, ligue o Row Level Security em toda tabela dele e confira se ele filtra de verdade.",[10,468,469],{},"Publicar no Base44 é um clique na barra de cima, e nada entre esse clique e a\ninternet relê o app procurando uma chave colada para fazer uma função\nfuncionar. Um scan que você rodou mês passado descreve o app do mês passado.",[10,471,472,473,477],{},"O ",[36,474,476],{"href":475},"\u002Fpricing","Reeve Monitor"," foi feito para isso. Ele roda de novo todas as nove\nverificações a cada hora em até três apps, vigia a disponibilidade a cada 60\nsegundos, avisa você quando um resultado muda em vez de esperar você olhar, e\nenvia um relatório mensal. Custa $12 por mês no preço de lista, com sete dias\ngrátis antes de cobrar; a página de preços às vezes fica abaixo do valor daqui\ne nunca acima. O Monitor vigia e nada mais, o que para um app do Base44 é a\nmetade que encaixa: o Care, nosso plano de backup, só faz backup de projetos\nSupabase, e um app do Base44 guarda os dados dentro do Base44, a menos que você\ntenha conectado um projeto próprio.",[10,479,480,481,484,485,489],{},"O guia em linguagem simples para esta plataforma é\n",[36,482,483],{"href":263},"Seu app do Base44 é seguro?",", e o\n",[36,486,488],{"href":487},"\u002Fchecklist","checklist de segurança de 10 minutos"," cobre o que vale a pena\nconfirmar em qualquer app recém-lançado, seja qual for a ferramenta que o\nconstruiu.",{"title":491,"searchDepth":492,"depth":492,"links":493},"",3,[494,496,497,498,499,500],{"id":27,"depth":495,"text":28},2,{"id":181,"depth":495,"text":182},{"id":231,"depth":495,"text":232},{"id":268,"depth":495,"text":269},{"id":312,"depth":495,"text":313},{"id":432,"depth":495,"text":433},"Noções de segurança","\u002Fblog\u002Fbase44-source-maps\u002Fcover-1200x630.png","Um app do Base44 com o selo da plataforma no canto, lido de fora para um relatório com três linhas apagadas e uma na cor de destaque.","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.",false,"md",[508,511,514,517,520],{"q":509,"a":510},"Meu scan diz que meu app do Base44 publica o código-fonte original. É verdade?","Nos apps do Base44 que reverificamos em setembro de 2026, não. O único source map que respondia pertencia ao script do selo do Base44, e ele contém o código do Base44 para esse selo. Os seus próprios arquivos saíram comprimidos e sem map em todos os apps que abrimos. A mesma linha em um app de outra ferramenta geralmente quer dizer o que diz, e lá ela merece leitura.",{"q":512,"a":513},"Posso desligar o CORS curinga em um app do Base44?","Não. A documentação do Base44 diz que a configuração de CORS por app não está disponível e que a plataforma cuida disso. O que você decide é o que os endereços do seu app devolvem a uma requisição sem login, e é ali, de todo modo, que o cabeçalho faria diferença. Nos apps do Base44 que reabrimos, o único endereço que respondia sem login devolvia configurações de consentimento de cookies.",{"q":515,"a":516},"O Base44 é menos seguro que o Lovable?","Um scan não consegue ranquear ferramentas, e essas duas têm formatos diferentes. Um app do Base44 traz mais achados, e quase todos são configurações da plataforma que não expõem nada seu. Um app do Lovable fala direto com o banco Supabase dele, então a configuração que mais vaza dados, uma tabela sem regras por linha, está ao alcance de quem constrói no Lovable e não de quem constrói no Base44. Duas notas D entre 5.438 apps do Base44 contra 407 entre 18.554 apps do Lovable é essa diferença em números. Isso não diz nada sobre o seu app até você escaneá-lo.",{"q":518,"a":519},"O que eu posso mudar de dentro do Base44?","Dois cabeçalhos de segurança (Prevent Embedding e Restrict Browser Features, em Security no painel do seu app), as regras de permissão de cada tabela, quais funções de backend exigem um usuário logado e quais chaves você cola no app. CORS, Content-Security-Policy e Strict-Transport-Security são definidos pela plataforma para todos os apps, e a documentação do Base44 diz isso.",{"q":521,"a":522},"Um source map público expõe minhas chaves de API?","Um map expõe código, e uma chave que está no código já estava no arquivo comprimido que todo visitante baixa. Em um app do Base44 o único map que encontramos pertence ao selo, então a pergunta de verdade é se existe alguma chave no seu bundle. O nosso scan lê o bundle para isso, separadamente. Nos apps do Base44 as chaves que ele encontra são quase sempre chaves de API do Google, que normalmente precisam de uma restrição definida no Google Cloud, e não de rotação.","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",[525,526,527,528,529,530,531],"segurança base44","base44 é seguro","base44 source maps","segurança app base44","base44 cors","base44 vs lovable segurança","base44 security",{},true,"\u002Fblog\u002Fbase44-source-maps","2026-09-17",{"title":5,"description":504},"blog\u002Fbase44-source-maps",[539,540,541],"A segurança no Base44 é decidida sobretudo pela plataforma. Um scan de um app do Base44 traz os mesmos três achados em quase todos: cabeçalhos faltando, um cabeçalho CORS curinga e um source map publicado.","Em 16 de setembro de 2026 voltamos para ler o que esses source maps contêm. Todo map que respondia pertencia ao script do selo do Base44. O código do dono saiu sem map em todos os apps que abrimos.","A sua parte é curta: qualquer chave colada no app (encontrada em 2% dos apps do Base44), as regras de permissão das suas tabelas e tudo o que você conectou por conta própria. As duas notas D entre 5.438 apps vieram dessa lista.","Zh-cpcFVD-NmARc0NGtefguITt_VThDehGAAOdGG7vc",[544,551,557,563,569,575,581,582,588,594,600,606,612,618,624,630,636,642,648,654,660,666,672,678,684,690,696,702,708,713,719,725,731,736,742,748,752,758,764,770,775,781],{"path":545,"title":546,"description":547,"published":548,"category":549,"image":550,"draft":505},"\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":552,"title":553,"description":554,"published":555,"category":501,"image":556,"draft":505},"\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":558,"title":559,"description":560,"published":561,"category":501,"image":562,"draft":505},"\u002Fblog\u002Fis-lovable-safe","O Lovable é seguro? O que vimos em 18.554 aplicativos Lovable","O Lovable é seguro? Passamos 18.554 aplicativos Lovable no ar por nove verificações. A plataforma foi a mais limpa de cinco. Os achados estavam nos aplicativos.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":564,"title":565,"description":566,"published":567,"category":501,"image":568,"draft":505},"\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":570,"title":571,"description":572,"published":573,"category":501,"image":574,"draft":505},"\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":576,"title":577,"description":578,"published":579,"category":501,"image":580,"draft":505},"\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":534,"title":5,"description":504,"published":535,"category":501,"image":523,"draft":505},{"path":583,"title":584,"description":585,"published":586,"category":501,"image":587,"draft":505},"\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":589,"title":590,"description":591,"published":592,"category":501,"image":593,"draft":505},"\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":595,"title":596,"description":597,"published":598,"category":549,"image":599,"draft":505},"\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":601,"title":602,"description":603,"published":604,"category":549,"image":605,"draft":505},"\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":607,"title":608,"description":609,"published":610,"category":549,"image":611,"draft":505},"\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":613,"title":614,"description":615,"published":616,"category":501,"image":617,"draft":505},"\u002Fblog\u002Fsafest-ai-app-builder","Qual builder de apps com IA é mais seguro? 30.998 apps testados","Qual builder de apps com IA é mais seguro? Escaneamos 30.998 apps no ar do Lovable, Base44, Replit, v0 e Bolt. O builder não é o que decide sua nota.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":619,"title":620,"description":621,"published":622,"category":501,"image":623,"draft":505},"\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":625,"title":626,"description":627,"published":628,"category":501,"image":629,"draft":505},"\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":631,"title":632,"description":633,"published":634,"category":501,"image":635,"draft":505},"\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":637,"title":638,"description":639,"published":640,"category":501,"image":641,"draft":505},"\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":643,"title":644,"description":645,"published":646,"category":501,"image":647,"draft":505},"\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":649,"title":650,"description":651,"published":652,"category":501,"image":653,"draft":505},"\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":655,"title":656,"description":657,"published":658,"category":501,"image":659,"draft":505},"\u002Fblog\u002Fmissing-security-headers","Cabeçalhos de segurança faltando: quando isso importa","Cabeçalhos de segurança faltando é o achado que nosso scanner mais imprime. Contra o que eles protegem e quando são a linha menos urgente do relatório.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":661,"title":662,"description":663,"published":664,"category":501,"image":665,"draft":505},"\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":667,"title":668,"description":669,"published":670,"category":501,"image":671,"draft":505},"\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":673,"title":674,"description":675,"published":676,"category":549,"image":677,"draft":505},"\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":679,"title":680,"description":681,"published":682,"category":501,"image":683,"draft":505},"\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":685,"title":686,"description":687,"published":688,"category":549,"image":689,"draft":505},"\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":691,"title":692,"description":693,"published":694,"category":501,"image":695,"draft":505},"\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":697,"title":698,"description":699,"published":700,"category":501,"image":701,"draft":505},"\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":703,"title":704,"description":705,"published":706,"category":501,"image":707,"draft":505},"\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":248,"title":709,"description":710,"published":711,"category":501,"image":712,"draft":505},"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":714,"title":715,"description":716,"published":717,"category":549,"image":718,"draft":505},"\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":720,"title":721,"description":722,"published":723,"category":549,"image":724,"draft":505},"\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":726,"title":727,"description":728,"published":729,"category":501,"image":730,"draft":505},"\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":281,"title":732,"description":733,"published":734,"category":501,"image":735,"draft":505},"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":737,"title":738,"description":739,"published":740,"category":549,"image":741,"draft":505},"\u002Fblog\u002Fai-agent-deleted-my-database","Um agente de IA apagou meus dados do Supabase. O que eu recupero?","Um agente de IA apagou dados do seu banco. O que você recupera já estava decidido antes de ele rodar, e os próximos minutos decidem o resto.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":743,"title":744,"description":745,"published":746,"category":501,"image":747,"draft":505},"\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":195,"title":749,"description":750,"published":746,"category":501,"image":751,"draft":505},"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":753,"title":754,"description":755,"published":756,"category":501,"image":757,"draft":505},"\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":759,"title":760,"description":761,"published":762,"category":549,"image":763,"draft":505},"\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":765,"title":766,"description":767,"published":768,"category":501,"image":769,"draft":505},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","O Supabase Row Level Security está ligado. A tabela continua pública.","Ligar o Supabase Row Level Security não protege uma tabela. Quem protege são as políticas, e a que consertou o seu app pode deixar qualquer um entrar.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":771,"title":772,"description":773,"published":768,"category":549,"image":774,"draft":505},"\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":776,"title":777,"description":778,"published":779,"category":549,"image":780,"draft":505},"\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":286,"title":782,"description":783,"published":779,"category":501,"image":784,"draft":505},"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",1790150954262]