Seu app do Replit é seguro?
O Replit serve para hospedar um app de verdade? Construir e publicar ali são um passo só, o que é prático, e é justo o que faz as conferências valerem.

Os logotipos são propriedade de seus respectivos donos e são exibidos apenas para indicar compatibilidade.
Em resumo
- Um app do Replit é seguro de hospedar, mas construir e publicar são um único movimento: não existe um passo de deploy onde pegar um erro.
- O Replit Secrets mantém uma chave fora dos seus arquivos. Ele não consegue mantê-la fora do navegador se quem a lê é o seu código de navegador.
- Se os seus dados estão no Supabase, quem decide quem pode lê-los é o Row Level Security, e ele é definido tabela por tabela.
O Replit roda o seu app e publica ele do mesmo lugar onde você constrói. É boa parte do apelo dele, e também significa que a distância entre "mudei uma coisa" e "a internet consegue ver" é praticamente zero. Não existe um passo de deploy separado em que dar uma pausa e pensar.
Aqui está o que guia após guia erra: guardar uma chave num gerenciador de segredos não a torna privada. O gerenciador decide onde o valor repousa. O seu código decide para onde ele viaja, e se o leva a um navegador, é ali que acaba.
O que um app do Replit publicado entrega a um visitante
A frente inteira, sempre.
Pense numa loja. As páginas, formulários e botões do seu app são a vitrine, entregue inteira a cada visitante que carrega o seu site: um navegador não desenha uma página que não recebeu. Os seus dados moram no estoque, um prédio separado na internet, com endereço e fechadura próprios.
A nuance que se perde no Replit é onde a fronteira cai. Código que roda no servidor e código que roda no navegador do visitante ficam no mesmo projeto, muitas vezes em arquivos vizinhos. Um valor lido no servidor fica no servidor. O mesmo valor lido por código de navegador é compilado dentro do que você publica. O Replit Secrets mantém uma chave fora dos seus arquivos-fonte, o que é genuinamente útil, e o que ele não consegue é decidir qual metade do seu app a lê.
É ruim o meu app do Replit ter uma chave dentro?
Normalmente não. Depende de qual chave, e existem duas que parecem quase iguais.
Uma chave publicável identifica o seu projeto e nada mais. O Supabase a chama
de sb_publishable_… nos projetos novos e anon nos antigos, e ela foi feita
para ficar num navegador. Uma chave secreta (sb_secret_…, ou
service_role antes da renomeação) ignora todas as regras que você definiu e lê
e escreve em toda linha de toda tabela.
Se um scanner te disser que uma chave está exposta, é isso o primeiro a estabelecer, porque uma delas é uma terça-feira comum e a outra merece uma parada. A conferência leva cerca de um minuto.
E "ninguém sabe a minha URL" não é defesa. Rastreadores automáticos leem sites públicos atrás exatamente desses textos, sem parar, sem a menor ideia de quem você é.
O que decide se estranhos conseguem ler os seus dados
As regras no seu banco de dados, que não fazem parte do seu projeto do Replit de jeito nenhum.
Se os seus dados estão no Supabase, a configuração é o Row Level Security: uma chave por tabela que decide linha a linha quem pode ler o quê. Desligada, a sua chave publicável devolve a tabela inteira para qualquer um. Ligada, com uma política escrita, devolve só o que a política permite.
Duas coisas decidem se você tem isso, e nenhuma é visível de dentro do seu app. O Supabase liga o Row Level Security por padrão nas tabelas criadas no Table Editor do painel, e não nas criadas rodando SQL, que é como um arquivo de migração, ou um assistente escrevendo o seu schema, as cria. E uma tabela pode carregar a configuração enquanto a política dela continua deixando todo mundo passar, ou seja, a chavinha sozinha não restringe ninguém.
Tirar uma página do seu app do Replit não muda nada disso. O estoque não sabe que a sua vitrine existe.
Como conferir o seu próprio app do Replit em uns dez minutos
Descubra qual metade lê cada segredo. Para cada chave do projeto, ache o código que a usa e decida se esse código roda no servidor ou no navegador. Tudo que o navegador lê está publicado, onde quer que estivesse guardado.
Carregue o seu próprio app publicado e abra o DevTools. A aba Rede mostra exatamente o que um visitante recebe. É a mesma visão que alguém de fora tem, e resolve a pergunta mais rápido do que ler arquivos.
Abra Authentication → Policies no Supabase. Tudo que mostrar Row Level Security como desligado pode ser lido por qualquer um que tenha o endereço do seu projeto.
E então olhe de fora de verdade. É para isso que existe o nosso scan gratuito: ele lê o seu site no ar do jeito que qualquer visitante leria e te dá uma nota em uns 20 segundos, sem conta: escaneie seu app.
O que fazer
- No Replit, construir e publicar são um movimento só. Não existe um passo de deploy onde pegar um erro.
- Um gerenciador de segredos protege um valor em repouso. Código de navegador publica o que lê, venha o valor de onde vier.
- Uma chave publicável no seu app está certa.
sb_secret_…eservice_rolesão as que se trocam hoje. - Tabelas criadas rodando SQL começam sem Row Level Security, e ligá-lo ainda deixa toda linha legível até que uma política diga o contrário.
- Uma URL desconhecida não é proteção. Rastreadores não precisam saber quem você é para achar o seu site.
Pegue a chave que o seu app mais usa e rastreie qual metade do seu projeto a lê: servidor ou navegador. Essa única resposta diz mais do que qualquer quantidade de leitura, e o checklist de segurança de 10 minutos cobre o resto da superfície depois que você a tiver.
O que pode dar errado de verdade com um app do Replit
Nada disso significa que você fez algo errado: são os efeitos colaterais normais de construir rápido. Aqui está o que vale a conferida:
Uma chave secreta no seu código em vez de nos Replit Secrets
O Replit te dá um gerenciador de Secrets para que as chaves fiquem fora do seu código. Mas é tentador colar uma chave direto em um arquivo para funcionar, e se esse arquivo roda no navegador, ou o seu Repl é público, qualquer um pode ler. O Reeve encontra as chaves no código carregado do seu app e diz quais são seguras de expor e quais precisam ser movidas.
Um Repl público expondo seu código-fonte (e as chaves)
Em muitos planos, os Repls são públicos por padrão, o que significa que seu código, e qualquer coisa fixada nele, pode ser lido por qualquer um com o link. O Reeve verifica o que o seu app implantado expõe por fora, para você saber se detalhes privados estão visíveis.
Seu banco de dados deixado aberto (RLS desligado)
Se o seu app guarda dados (no banco de dados do Replit, no Supabase ou em outro Postgres), normalmente há uma regra sobre quem pode ler ou alterar cada linha. Se estiver desligada ou mal configurada, suas tabelas podem ficar abertas para qualquer um que encontrar o endereço. É o problema sério mais comum, e ele se esconde até você verificar.
Um arquivo .env ou de configuração exposto
As chaves costumam viver em um arquivo .env que não deveria ser publicado. Às vezes ele acaba acessível no site implantado mesmo assim, o que é um atalho para tudo o que é sensível. O Reeve verifica se o seu está acessível sem você saber.
Source maps deixados ligados
Um “source map” revela o código original do seu app para qualquer um que olhar. Prático durante o desenvolvimento, mas em produção dá a estranhos uma cópia legível de como o seu app funciona e deixa outras brechas mais fáceis de achar. O Reeve verifica se os seus estão expostos.
Cabeçalhos de segurança ausentes e endpoints abertos
Pequenas configurações que dizem aos navegadores como proteger seus visitantes, além de se os seus endpoints de dados respondem a qualquer um ou a qualquer site. Pequenos sozinhos; juntos, ampliam a brecha. O Reeve sinaliza o que está faltando.
O que o Reeve é, e o que não é
O Reeve é uma verificação gratuita, somente leitura e por fora, como um inspetor que testa as portas sem entrar. É rápida e pega os erros comuns de grande impacto. Não é uma auditoria de segurança completa, e uma nota limpa não é garantia. Significa que as portas óbvias estão fechadas.
O Replit te dá boas ferramentas (um gerenciador de Secrets e controles sobre se um Repl é público), e elas ajudam de verdade quando você as usa. O que o Reeve acrescenta: uma verificação do que o seu app implantado realmente expõe por fora, caso uma chave tenha escapado para o código ou um Repl esteja mais público do que você pensava, explicado em palavras simples com as quais você pode agir. E se você preferir não pensar nisso, podemos monitorar para você.
Quer que seja resolvido, não só verificado?
O Reeve Care continua monitorando seu app, faz backup dos seus dados e ajuda você a corrigir as coisas quando quebram, para que você siga criando em vez de se preocupar.
Conheça o Reeve CarePerguntas frequentes
Os apps do Replit são seguros por padrão?
O Replit te dá as peças para ser seguro (Secrets, controles de implantação), mas “por padrão” depende de as chaves terem ficado nos Secrets, de o seu Repl ser privado e de as regras do seu banco de dados estarem ligadas. A única forma de saber é verificar o que está exposto, e é isso que o Reeve faz de graça em cerca de 20 segundos.
É seguro manter chaves de API no meu código do Replit?
É muito mais seguro mantê-las nos Replit Secrets do que no seu código. Uma chave escrita em um arquivo pode ser lida se esse código roda no navegador ou o seu Repl é público. O Reeve encontra chaves no seu app carregado e diz quais são seguras de expor e quais precisam ir para os Secrets.
As pessoas podem ver meu código se o meu Repl é público?
Sim. Um Repl público significa que seu código-fonte, e qualquer coisa fixada nele, pode ser lido por qualquer um com o link. O Reeve verifica o que o seu app implantado revela por fora para você poder ver se detalhes privados estão à mostra.
Verificar meu app do Replit vai quebrar algo?
Não. O Reeve só olha o que já é público por fora. Ele nunca faz login, nunca muda nada e nunca baixa seus arquivos. Somente leitura, como conferir se uma porta está trancada sem entrar.
Coloquei minhas chaves no Replit Secrets em vez de no código. Isso as torna privadas?
Isso as mantém fora dos seus arquivos, o que vale a pena e resolve um problema real. Não torna um valor privado assim que o seu app o envia para um navegador. Se o código que usa a chave roda no navegador do visitante, a chave viaja até lá, não importa onde estivesse guardada. Um gerenciador de segredos protege um valor em repouso, e é o seu app que o carrega até o visitante.
Meu app do Replit é pequeno e ninguém sabe a URL. Isso basta?
Não, e o motivo é que ninguém precisa te conhecer. Rastreadores automáticos varrem sites públicos sem parar atrás de textos com cara de chave e de endpoints de banco abertos, sem a menor ideia de quem é o dono. Ser desconhecido não é a mesma coisa que ser inalcançável.
Onde eu olho para saber se o meu banco está aberto?
Se você usa Supabase, abra o projeto e vá em Authentication, depois Policies. Cada tabela do schema public aparece ali com o estado do Row Level Security. Tudo que estiver desligado pode ser lido por quem tiver a URL do seu projeto e a sua chave publicável, e as duas coisas estão dentro do app que você publicou.