O Que É um Secret Hardcoded? A Credencial que Você Nunca Deve Commitar
Um secret hardcoded é uma senha, chave ou token escrito diretamente no código-fonte ou config, onde qualquer um com acesso ao repo (ou ao histórico do git) pode lê-lo.
Hardcodar um secret parece conveniente: cola a chave, entrega o código, segue em frente. O problema é que o código-fonte se espalha. Ele é clonado, forkado, feito backup e mantido no histórico para sempre. Uma vez commitado, um secret é efetivamente público para todos que conseguem alcançar o repo, e removê-lo do histórico é doloroso.
Como se parece
Um secret hardcoded é uma chave de API em um arquivo JavaScript, uma senha de banco de dados em uma config YAML, ou um token em um shell script commitado no repo. É qualquer credencial que vive no controle de versão em vez de ser injetada em tempo de execução.
Por que é perigoso
- Qualquer um com acesso de leitura ao repo pode usá-lo.
- Ele persiste no histórico do git mesmo depois de você apagar a linha.
- Forks, clones e backups o copiam para todo lugar.
- Repos públicos o expõem a scanners automatizados em minutos.
A armadilha do histórico do git
Apagar um secret hardcoded em um novo commit não o remove; o valor antigo ainda fica no histórico e é trivialmente recuperável. As únicas correções reais são rotacionar o secret (assuma que está queimado) e, se necessário, reescrever o histórico, o que é disruptivo.
Como evitá-lo
Injete secrets em tempo de execução a partir de variáveis de ambiente ou de um secrets manager, nunca de arquivos commitados. Adicione padrões para arquivos de chave ao .gitignore e use secret scanning para pegar erros antes que façam merge.
Pegando-os automaticamente
Scanners de secret rodam na CI e a cada push, sinalizando qualquer coisa que pareça uma credencial. Combinados com um hook de pre-commit, eles barram a maioria dos secrets hardcoded antes que cheguem a uma branch compartilhada.
Principais conclusões
- Um secret hardcoded é uma credencial commitada no código-fonte ou config.
- Ele persiste no histórico do git para sempre e se espalha por clones e forks.
- Injete secrets em tempo de execução e use scanning para bloqueá-los antes do merge.