Skip to content
Latchkey

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.

Guias relacionados