
credactor v2.6.0
Digitalize. Redija. Faça commit limpo.
Credactor
Encontre o segredo. Corrija-o. Faça commit limpo.
A maioria dos scanners de segredos para no alerta: você recebe uma lista de credenciais vazadas e a limpeza é por sua conta. O Credactor encontra segredos embutidos no código e os reescreve no próprio local, de modo que um vazamento na sua árvore de trabalho passa de encontrado a corrigido com um único comando. Ele roda na sua máquina, como um hook de pré-commit ou como um gate de CI, e também pode corrigir o que o Gitleaks, o TruffleHog ou o Betterleaks encontram.
# Before
db_password = "h8Tq2vKp9mRz4Wd"
# credactor --fix-all . (default: a sentinel that fails loudly at runtime)
db_password = "REDACTED_BY_CREDACTOR"
# credactor --replace-with env --fix-all . (read it from the environment)
db_password = os.environ["DB_PASSWORD"]
A redação limpa sua árvore de trabalho. Ela não revoga a credencial e não toca no histórico do git. Se um segredo já foi commitado ou compartilhado, rotacione-o e reescreva o histórico se precisar removê-lo de lá também (por exemplo, com
git filter-repo).
Por que o Credactor
- Ele corrige, não apenas sinaliza. Cada achado é substituído no local por um sentinel, seu próprio marcador ou uma consulta de variável de ambiente na linguagem do próprio arquivo.
- Escritas cuidadosas. Cada edição é planejada em memória, com backup prévio (modo
0600), gravada em um arquivo temporário e renomeada para o local. Um arquivo que mudou durante a execução, um caminho que sai da raiz de varredura ou um bloco de chave privada é ignorado com um aviso, e seu achado permanece reportado. - Funciona com o scanner que você já executa. Alimente-o com um relatório do Gitleaks, TruffleHog ou Betterleaks e ele corrige os achados deles e os seus em uma única passagem deduplicada.
- Feito para pipelines. Um gate
--cisomente leitura com códigos de saída claros, SARIF 2.1.0 com localizações de linha e coluna para o GitHub Code Scanning, uma GitHub Action e um hook de pre-commit. Os segredos são mascarados em todos os formatos de relatório, e a saída de texto é limpa para que um arquivo escaneado não possa injetar sequências de escape ou comandos de workflow de CI no seu terminal ou log. - Releases verificadas contra seu código-fonte. Biblioteca padrão pura do Python 3.11+ sem
dependências de runtime. Antes de uma release chegar ao PyPI, cada
arquivo do Credactor no wheel e no sdist é comparado byte a byte com o
código-fonte marcado, e os metadados do pacote devem corresponder ao
pyproject.toml(veja Endurecimento da cadeia de suprimentos).
Onde ele não é a ferramenta certa por si só: suas regras integradas cobrem os formatos de credenciais que vazam com mais frequência, em vez de centenas de provedores, e ele não verifica se um segredo está ativo. Uma execução limpa significa que nada correspondeu às suas regras, não que o código não contenha segredos. Combine-o com um scanner dedicado para amplitude (veja Traga seu próprio scanner).
Instalação
pip install credactor
Com o uv, instale-o como uma ferramenta ou execute-o uma vez sem instalá-lo:
uv tool install credactor
uvx credactor --dry-run .
Ou com Homebrew no macOS e Linux:
brew install rxb06/tap/credactor
Requer Python 3.11 ou mais recente. Testado em CI no Linux e Windows, Python 3.11 a
3.13. Para arquivos em codificações diferentes de UTF-8, Latin-1 ou UTF-16 simples, adicione
o extra opcional: pip install 'credactor[encoding]' ou
uv tool install 'credactor[encoding]' (a fórmula do Homebrew o inclui).
Início rápido
1. Veja o que ele encontra. Nada é alterado.
credactor --dry-run .
======================================================================
CREDENTIAL SCAN REPORT -- 2 finding(s) in 1 file(s)
======================================================================
FILE: config.py
────────────────────────────────────────────────────────────
Line 3 [HIGH] [variable:db_password]
db_password = "h8Tq[REDACTED]"
Line 4 [CRITICAL] [pattern:AWS access key]
aws_key = "AKIA[REDACTED]"
Os relatórios mostram apenas os primeiros quatro caracteres de cada segredo.
2. Corrija-os. Revise primeiro as descobertas: --fix-all reescreve todas elas,
incluindo os falsos positivos. Para manter uma, adicione # credactor:ignore à sua linha
(consulte Suprimir falsos positivos) ou corrija
interativamente e responda n. Antes de cada arquivo ser alterado, uma cópia .bak é
gravada ao lado dele para que você possa desfazer.
credactor . # ask y/N for each finding (needs a terminal)
credactor --fix-all . # fix all after one confirmation
credactor --fix-all --yes . # fix all, no prompt (scripts)
credactor --replace-with env --fix-all . # environment lookups instead of the sentinel
O modo Env grava a consulta, não o import: adicione import os ou o
equivalente da sua linguagem se o arquivo não o tiver. No Windows Git Bash, execute o modo interativo
como winpty credactor ..
3. Verifique e depois limpe os backups. Cada .bak ainda contém o segredo
original, e o Credactor nunca edita seu .gitignore, então um simples git add .
o colocaria no stage.
diff config.py.bak config.py # check what changed
cp config.py.bak config.py # undo
Adicione *.bak e *.credactor.tmp ao .gitignore e exclua os backups quando
estiver satisfeito. Para manter os backups fora da árvore desde o início, passe
--secure-backup-dir DIR (um diretório fora do repositório) na execução de correção.
--secure-delete apaga cada backup, o que deixa o git como seu único
desfazer.
Comandos em resumo
| Comando | O que faz | Altera arquivos |
|---|---|---|
credactor --dry-run . | Relata as descobertas | Não |
credactor . | Revisa e corrige uma descoberta por vez | Sim, com y |
credactor --fix-all . | Corrige todas as descobertas após uma confirmação | Sim |
credactor --ci . | Gate: sai com 1 se houver descobertas | Nunca |
credactor --staged --ci . | Gate apenas no que está em stage para commit | Nunca |
credactor --scan-history . | Escaneia os últimos 100 commits que alteraram arquivos | Nunca |
credactor --ci -f sarif . > results.sarif | SARIF 2.1.0 para Code Scanning | Nunca |
credactor --ci -f json . > findings.json | Relatório legível por máquina | Nunca |
Cada flag e combinação está no Manual.
Use no pre-commit e no CI
Hook de pre-commit
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.7.5
hooks:
- id: credactor
pre-commit install
Cada git commit então verifica o conteúdo preparado (staged) e é bloqueado se contiver uma credencial. O hook nunca reescreve arquivos. Ele requer pre-commit 3.2.0 ou mais recente; sem o framework, consulte o
hook autônomo.
GitHub Action
steps:
- uses: actions/checkout@v7
- uses: rxb06/[email protected]