
credactor v2.6.0
Scansiona. Oscura. Commit pulito.
Credactor
Trova il segreto. Correggilo. Esegui il commit in modo pulito.
La maggior parte degli scanner di segreti si ferma all'avviso: ottieni un elenco di credenziali compromesse e la pulizia spetta a te. Credactor trova i segreti hardcoded e li riscrive sul posto, così una fuga nel tuo working tree passa da trovata a corretta con un solo comando. Funziona sulla tua macchina, come hook pre-commit o come gate CI, e può anche correggere ciò che Gitleaks, TruffleHog o Betterleaks trovano.
# 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"]
La redazione ripulisce il tuo albero di lavoro. Non revoca la credenziale e non tocca la cronologia git. Se un segreto è stato committato o condiviso, ruotalo, e riscrivi la cronologia se devi rimuoverlo anche da lì (ad esempio con
git filter-repo).
Perché Credactor
- Corregge, non solo segnala. Ogni rilevamento viene sostituito sul posto con un sentinel, un tuo marcatore, o una lookup di variabile d'ambiente nel linguaggio stesso del file.
- Scritture accurate. Ogni modifica è pianificata in memoria, salvata prima in backup (modalità
0600), scritta su un file temporaneo e rinominata nella posizione finale. Un file che è cambiato durante l'esecuzione, un percorso che esce dalla radice della scansione, o un blocco di chiave privata viene saltato con un avviso, e il suo rilevamento resta segnalato. - Funziona con lo scanner che già usi. Passagli un report di Gitleaks, TruffleHog o Betterleaks e corregge i loro rilevamenti e i propri in un'unica passata deduplicata.
- Pensato per le pipeline. Un gate
--ciin sola lettura con codici di uscita chiari, SARIF 2.1.0 con posizioni di riga e colonna per GitHub Code Scanning, una GitHub Action e un hook pre-commit. I segreti sono mascherati in ogni formato di report, e l'output testuale è ripulito così che un file scansionato non possa iniettare sequenze di escape o comandi di workflow CI nel tuo terminale o nel log. - Release verificate rispetto al loro sorgente. Libreria standard Python 3.11+ pura
senza dipendenze a runtime. Prima che una release raggiunga PyPI, ogni
file di Credactor nella wheel e nella sdist è confrontato byte per byte con il
sorgente taggato, e i metadati del pacchetto devono corrispondere a
pyproject.toml(vedi Rafforzamento della supply chain).
Dove non è lo strumento giusto da solo: le sue regole integrate coprono i formati di credenziali che trapelano più spesso piuttosto che centinaia di provider, e non verifica se un segreto è attivo. Un'esecuzione pulita significa che nulla ha corrisposto alle sue regole, non che il codice non contenga segreti. Abbinalo a uno scanner dedicato per l'ampiezza (vedi Porta il tuo scanner).
Installazione
pip install credactor
Con uv, installalo come strumento, oppure eseguilo una volta senza installarlo:
uv tool install credactor
uvx credactor --dry-run .
Oppure con Homebrew su macOS e Linux:
brew install rxb06/tap/credactor
Richiede Python 3.11 o superiore. Testato in CI su Linux e Windows, da Python 3.11 a
3.13. Per file con codifiche diverse da UTF-8, Latin-1 o UTF-16 semplice, aggiungi
l'extra opzionale: pip install 'credactor[encoding]' o
uv tool install 'credactor[encoding]' (la formula Homebrew lo include).
Avvio rapido
1. Guarda cosa trova. Nulla viene modificato.
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]"
I report mostrano solo i primi quattro caratteri di ogni segreto.
2. Correggili. Esamina prima i risultati: --fix-all riscrive tutti, inclusi i falsi positivi. Per mantenerne uno, aggiungi # credactor:ignore alla sua riga
(vedi Suppress false positives) oppure correggi
in modo interattivo e rispondi n. Prima che ogni file venga modificato, viene scritta una copia .bak
accanto ad esso così puoi annullare.
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
La modalità Env scrive il lookup, non l'import: aggiungi import os o l'equivalente del tuo linguaggio se il file ne è privo. Su Windows Git Bash, esegui la modalità interattiva come winpty credactor ..
3. Verifica, poi elimina i backup. Ogni .bak contiene ancora il segreto originale, e Credactor non modifica mai il tuo .gitignore, quindi un semplice git add . lo metterebbe in staging.
diff config.py.bak config.py # check what changed
cp config.py.bak config.py # undo
Aggiungi *.bak e *.credactor.tmp a .gitignore ed elimina i backup una
volta soddisfatto. Per tenere i backup fuori dall'albero fin dall'inizio, passa
--secure-backup-dir DIR (una directory esterna al repository) durante l'esecuzione di correzione.
--secure-delete cancella invece ciascun backup, lasciando git come unica
possibilità di annullamento.
Comandi in breve
| Comando | Cosa fa | Modifica i file |
|---|---|---|
credactor --dry-run . | Segnala i risultati | No |
credactor . | Rivedi e correggi un risultato alla volta | Sì, con y |
credactor --fix-all . | Correggi ogni risultato dopo una conferma | Sì |
credactor --ci . | Gate: esce con 1 in caso di risultati | Mai |
credactor --staged --ci . | Gate solo su ciò che è in stage per il commit | Mai |
credactor --scan-history . | Analizza gli ultimi 100 commit che modificano file | Mai |
credactor --ci -f sarif . > results.sarif | SARIF 2.1.0 per Code Scanning | Mai |
credactor --ci -f json . > findings.json | Report leggibile da macchina | Mai |
Ogni flag e combinazione è nel Manuale.
Usalo in pre-commit e CI
Hook pre-commit
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.7.5
hooks:
- id: credactor
pre-commit install
Ogni git commit esegue quindi la scansione del contenuto in staging e viene bloccato se contiene una
credenziale. L'hook non riscrive mai i file. Richiede pre-commit 3.2.0 o versione successiva;
senza il framework, consulta l'
hook standalone.
GitHub Action
steps:
- uses: actions/checkout@v7
- uses: rxb06/[email protected]