Guia · Chaves e segredos
Chave de API exposta no site: como descobrir e o que fazer
Tudo o que vai no JavaScript do seu site pode ser lido por qualquer visitante. Algumas chaves são feitas para isso; outras dão acesso à sua conta, ao seu banco ou ao seu cartão de crédito. Se uma chave secreta apareceu no código público, apagá-la não basta: ela precisa ser trocada.
Por que a chave vai parar no navegador
Em apps feitos com Vite, Next.js e afins, toda variável com prefixo público — VITE_, NEXT_PUBLIC_, REACT_APP_ — é copiada para dentro do JavaScript que o navegador baixa. É o comportamento esperado: o prefixo existe justamente para dizer “esta pode ser pública”.
O problema começa quando uma chave secreta ganha esse prefixo. Costuma acontecer quando a IA precisa fazer uma chamada funcionar e faz direto do navegador — e a chave vai junto.
Quais podem ficar no navegador — e quais nunca
| Chave | Pode ir no site? | Por quê |
|---|---|---|
Supabase anon | Sim | Foi feita para isso; quem protege os dados é o RLS |
Firebase apiKey | Sim | Quem protege são as regras do Firestore e do Storage |
Stripe publicável pk_live_… | Sim | Só cria o formulário de pagamento |
| Google Maps | Sim, restrita | Restrinja a chave ao seu domínio no Google Cloud |
Supabase service_role | Nunca | Ignora todas as regras de acesso do banco |
OpenAI sk-… e outras de IA | Nunca | Qualquer pessoa gasta o seu crédito |
Stripe secreta sk_live_… | Nunca | Dá acesso a cobranças e reembolsos |
AWS AKIA… | Nunca | Pode dar acesso à sua conta de nuvem |
E-mail (Resend re_…, SendGrid SG.…) | Nunca | Qualquer pessoa manda e-mail em seu nome |
Como descobrir se o seu site expõe uma
- Abra o site, aperte F12, vá em Fontes (Sources) e use a busca em todos os arquivos (Ctrl+Shift+F) por
sk-,sk_live,service_role,AKIAesecret. - Na aba Rede (Network), veja para quais endereços o site manda requisições e com quais cabeçalhos.
- No projeto, procure as variáveis com prefixo público: todas elas vão para o navegador. Confira se alguma é secreta.
- Se o código está no GitHub, ferramentas como gitleaks ou trufflehog procuram segredos no histórico inteiro do repositório — não só na versão atual.
- Ou rode uma análise passiva, que lê os arquivos que a sua página publica e procura esses formatos de chave.
Achou uma. E agora? A ordem importa
- Troque a chave agora — revogue e gere outra no painel do serviço. Apagar do código não basta: a chave já foi baixada por quem visitou o site e continua no histórico do repositório.
- Mova a chamada para o servidor: uma rota de API, uma Edge Function do Supabase ou uma função serverless. O navegador fala com a sua rota; só ela conhece a chave.
- Ponha limites no provedor: teto de gasto e alerta de uso, que OpenAI, Google Cloud e Stripe oferecem.
- Olhe o uso recente no painel do serviço, procurando consumo que não foi seu.
Esconder não é proteger
Codificar a chave em base64 ou ofuscar o código não resolve. Tudo o que o navegador consegue usar, qualquer visitante também consegue ler.
Prompt para colar na sua IA
Encontrei a chave do serviço [NOME DO SERVIÇO] no código do front-end.
1. Mova todas as chamadas a esse serviço para uma função no servidor
(Edge Function do Supabase ou uma rota de API).
2. Leia a chave de uma variável de ambiente SEM prefixo público
(nada de VITE_ ou NEXT_PUBLIC_).
3. Faça o front-end chamar apenas essa função.
4. Confirme que a chave não aparece em nenhum arquivo do front-end
e mostre onde ela passou a ser lida.