Guias de Segurança
Fundamentos de segurança: o que é de fato perigoso em .env e chaves de API
Um primeiro passo para desenvolvedores indie que vivem ouvindo 'segurança importa' mas não sabem por onde começar. O que é o .env, o que acontece quando uma chave de API vaza (com um diagrama de fluxo) e os quatro hábitos mínimos que você pode adotar hoje — explicado de forma simples, sem medo, na prática.
"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"
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 as chaves ficam juntas num arquivo só, um vazamento derrama todas de uma vez — então é o arquivo a proteger primeiro (→ Glossário: O que é o .env).
O que significa um vazamento de chave de API
Uma chave de API é "uma chave reserva para usar um serviço como se fosse você." Em mãos erradas, ela encadeia assim.
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.
Quatro hábitos para começar hoje
Nada difícil. Só estes quatro.
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.
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.
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.
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 -1Verificar isto a cada deploy pega erros de posicionamento cedo.
Erros comuns vs o primeiro passo certo
Comum
- "Funciona", então jogar o
.envbem embaixo de public - "Apago depois", então comitar o
.envuma 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
.envvia.gitignoredesde 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.
Leia a seguir
- Glossário: O que é o .env · O que é um CVE · O que é RCE
- Defesa: Mantenha o .env fora da web pública · Higiene de CVE no Next.js
- Incidente: Uma chave de API roubada cobrada por fraude
- Incidente: uma chave roubada fez a conta ser banida
FAQ
QPor onde devo começar com seguranç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?
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?
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.