Guias de Segurança

Fundamentos de segurança: o que é de fato perigoso em .env e chaves de API

O que é o .env, o que acontece quando uma chave de API vaza e a cobrança vem para você, e quatro hábitos mínimos para desenvolvedores indie adotarem hoje.

Publicado 2026-06-07 Atualizado 2026-10-06 9 min de leitura
Nesta página

"Vivo ouvindo que segurança importa, mas por onde eu sequer começo?" Este é o primeiro passo para desenvolvedores indie. Não para te assustar — só coisas em que você pode agir hoje, em ordem.

Por que começar pelos segredos (.env e chaves de API)

A maioria dos incidentes reais começa não com ataques sofisticados, mas com um segredo vazado. Os dois casos sobre os quais este site foi construído eram ambos vazamentos de segredo:

Proteja seus segredos e você previne a maioria dos incidentes comuns. Por isso começamos aqui.

O que é o .env (em 30 segundos)

O .env é um arquivo que reúne os valores secretos do seu app: a senha do banco de dados, chaves de API externas, a chave que criptografa as sessões. Como os segredos ficam juntos num arquivo só, um vazamento expõe todos de uma vez — então é o arquivo a proteger primeiro (→ Glossário: O que é o .env).

Onde os segredos podem ficar (.env, variáveis de ambiente, gerenciadores de segredos)

O .env não é o único lugar para segredos. Escolha conforme a escala e o uso.

OndeMelhor paraCuidado com
Um arquivo .envDesenvolvimento local, um único servidor pequenoMantenha-o fora do Git e fora de diretórios públicos
Configuração de variáveis de ambiente da hospedagem (digitadas num painel)ProduçãoLimite quem acessa o painel; mantenha os valores fora dos logs de build
Segredos de CI (testes e deploy automatizados)Automação como GitHub ActionsFerramentas externas executadas na CI conseguem ver os valores; passe chaves só com os direitos necessários
Um gerenciador de segredosVárias pessoas ou vários servidoresMantenha o acesso de leitura mínimo e faça rotação regular

Para segredos de CI, o incidente da Codecov em 2021 é uma referência útil. Uma ferramenta externa executada na CI foi adulterada, e segredos guardados em variáveis de ambiente da CI foram levados (→ o incidente da Codecov).

Chaves que você pode publicar e chaves que não pode

Algumas chaves de API foram feitas para ir dentro de navegadores ou apps móveis; outras são só para servidores. Suponha que qualquer coisa enviada a um navegador pode ser lida por qualquer pessoa.

ExemploPode publicar?Por quê
Chave publicável da Stripe (começa com pk_)SimA documentação diz que ela pode ir no código do front-end; ela não consegue fazer operações sensíveis como criar cobranças
Chave secreta (sk_) ou chave restrita (rk_) da StripeNãoElas permitem operações do lado do servidor; a documentação recomenda chaves restritas com permissões reduzidas
Variável de ambiente do Next.js com NEXT_PUBLIC_PublicadaO valor é embutido no JavaScript do navegador no momento do build
Variável de ambiente do Next.js sem NEXT_PUBLIC_Não publicada (só servidor)Coloque os valores secretos aqui

Em dúvida, veja na documentação oficial do serviço se a chave pode ser usada no lado do cliente. Se ela não disser, trate-a como uma chave que você não pode publicar.

O que significa um vazamento de chave de API

Uma chave de API é "uma sequência de caracteres que faz um serviço tratar quem a usa como se fosse você." Em mãos erradas, o dano se espalha assim.

① A chave de API vaza (diretório público, commit no git ou via uma vulnerabilidade)
↓ com atraso (dias+)
② Um terceiro usa o serviço externo "como você"
↓
③ Cobrança fraudulenta / leitura-escrita de dados / personificação
Silencioso no começo. Abusado com atraso — então um dia surge uma fatura ou uma invasão.

Chaves roubadas são frequentemente revendidas e abusadas com atraso — "nada acontece no começo, depois uma fatura surpresa" é o padrão clássico. Então "depois que você nota" é tarde demais; o ponto é não vazá-las logo de início.

O que fazer se uma chave pode ter vazado

Apagar a chave do código não a desativa. O relatório de 2025 da GitGuardian concluiu que 70% dos segredos vazados em repositórios públicos em 2022 ainda eram válidos na data do relatório. Responda nesta ordem.

  1. Revogue ou rotacione a chave no painel do emissor. Se o serviço oferecer um período de transição, encerre a chave vazada "agora"
  2. Configure a nova chave em produção e confirme que o app funciona
  3. Verifique no histórico de uso e na cobrança do emissor se há atividade que não foi sua
  4. Remover a chave dos arquivos e do histórico do Git pode esperar até depois da revogação (só apagar não detém quem já tem uma cópia)

Os detalhes estão em 540.000 credenciais publicadas no GitHub ainda são válidas. O GitHub ativa por padrão a "proteção de push" (push protection), que impede uma conta pessoal de fazer push de segredos para um repositório público, mas ela não pega todo tipo de segredo.

Quatro hábitos para começar hoje

Nada difícil. Só estes quatro.

1

Não o exponha

Nunca coloque o .env ou o corpo do app num diretório visível pela web (a raiz web). Exponha só o public/. Passos concretos para hospedagem compartilhada: este guia.

2

Não o comite

Adicione .env* ao .gitignore (permita !.env.example); compartilhe só um exemplo sem valores. Uma vez comitado, é recuperável do histórico, então mantenha-o fora desde o início.

3

Rotacione tudo se vazar

Não só uma chave — rotacione todo segredo que poderia ter vazado. Ordem: API externa / OAuth → chaves de criptografia → e-mail → DB. Aja como se tivessem sido vistos.

4

Autoverifique

De vez em quando confirme que /.env não pode ser aberto de fora (abaixo).

Autoverificação (só contra domínios que você possui)

# Um 200 com corpo significa que está exposto. 403/404 está ok por enquanto.
curl -sI https://seu-dominio/.env | head -1
curl -sI https://seu-dominio/.git/config | head -1

Verificar isto a cada deploy pega erros de posicionamento cedo.

Além do que é visível de fora, verifique também o Git e a saída do build (execute no seu próprio repositório).

# O .env já foi comitado alguma vez? (qualquer saída significa que sim, em algum momento)
git log --all --oneline -- .env
# arquivos parecidos com env que o Git rastreia agora (qualquer coisa além de .env.example merece atenção)
git ls-files | grep -i "env"

Para confirmar que nenhuma chave vai para o navegador, procure os primeiros caracteres da chave na pasta de saída do build (no Next.js, .next/static). Você também pode colar o código no scanner de vazamento de segredos antes de publicar (nada é enviado a lugar nenhum).

Erros comuns vs o primeiro passo certo

Comum

  • "Funciona", então jogar o .env bem embaixo de public
  • "Apago depois", então comitar o .env uma vez
  • Rotacionar só a única chave que você viu sendo abusada

O primeiro passo certo

  • Corpo do app fora da raiz web, expor só public/
  • Excluir o .env via .gitignore desde o início
  • Se vazar, rotacionar todo segredo do env

Próximos passos

A partir daqui, os próximos tópicos são "os padrões arriscados na sua stack" e "um sistema para não ficar para trás nos CVEs publicados". Sem pressa, um de cada vez.

Fontes

Leia a seguir

FAQ

QPor onde devo começar com segurança?
A

Por não vazar seus segredos (.env e chaves de API). A maioria dos incidentes reais começa aí. Não os exponha, não os comite no git, rotacione tudo se vazarem e faça autoverificação de vez em quando — isso previne a maioria.

QO que concretamente acontece se uma chave de API vaza?
A

Alguém pode agir como você contra um serviço externo. Os desfechos comuns são cobrança fraudulenta (uso pesado cobrado de você) e leitura/escrita dos seus dados. Chaves roubadas são frequentemente revendidas e abusadas com atraso.

QPosso colocar o .env no git?
A

Não. Adicione .env* ao .gitignore e compartilhe só um .env.example sem valores. Uma vez comitado, ele pode ser recuperado do histórico do git mesmo depois que você o apaga.

QO que é um arquivo .env?
A

Um arquivo de texto que mantém as configurações de um app, em especial valores secretos como senhas e chaves de API, separados do código. Cada linha é NOME=valor. Muitos frameworks, incluindo Laravel, Next.js e Django, o leem ao iniciar. Como os segredos ficam juntos, ele precisa ficar fora do Git e fora de diretórios públicos.

QQual a diferença entre .env e variáveis de ambiente?
A

Variáveis de ambiente são o mecanismo em si: valores que o sistema operacional ou o runtime passa para um programa. Um arquivo .env é um recipiente que guarda esses valores num arquivo para que o app ou uma biblioteca os carregue como variáveis de ambiente ao iniciar. Em produção, muitas configurações dispensam o arquivo .env e passam as variáveis de ambiente pelo painel da hospedagem ou por um gerenciador de segredos.

QPosso colocar uma chave de API no código do front-end (navegador)?
A

Só se a documentação disser explicitamente que a chave pode ser publicada. Qualquer pessoa consegue ler o JavaScript que você envia ao navegador. Por exemplo, a documentação da Stripe diz que as chaves publicáveis (que começam com pk_) podem ir no código do front-end, enquanto as chaves secretas (sk_) e as chaves restritas (rk_) não podem ser expostas. No Next.js, variáveis de ambiente com o prefixo NEXT_PUBLIC_ são embutidas no código do navegador, então nunca dê esse prefixo a um segredo.