
credactor v2.6.0
Сканируй. Редактируй. Коммить чисто.
Credactor
Найди секрет. Исправь его. Закоммить чисто.
Большинство сканеров секретов останавливаются на оповещении: вы получаете список утёкших учётных данных, а очистка — ваша забота. Credactor находит жёстко закодированные секреты и переписывает их на месте, так что утечка в вашем рабочем дереве проходит путь от обнаружения до исправления одной командой. Он работает на вашей машине, как pre-commit hook или как CI-гейт, и также может исправлять то, что находят Gitleaks, TruffleHog или Betterleaks.
# 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"]
Редакция очищает ваш рабочий каталог. Она не отзывает учётные данные и не затрагивает историю git. Если секрет когда-либо был закоммичен или передан, смените его и перепишите историю, если нужно удалить его и оттуда (например, с помощью
git filter-repo).
Зачем Credactor
- Он исправляет, а не просто помечает. Каждая находка заменяется на месте на sentinel, ваш собственный маркер или обращение к переменной окружения на языке самого файла.
- Аккуратная запись. Каждое изменение планируется в памяти, сначала
создаётся резервная копия (режим
0600), затем запись во временный файл и переименование на место. Файл, изменившийся во время запуска, путь, выходящий за пределы корня сканирования, или блок приватного ключа пропускаются с предупреждением, а его находка остаётся в отчёте. - Работает с тем сканером, который вы уже используете. Передайте ему отчёт Gitleaks, TruffleHog или Betterleaks, и он исправит их находки и свои собственные за один проход с дедупликацией.
- Создан для пайплайнов. Read-only шлюз
--ciс понятными кодами выхода, SARIF 2.1.0 с указанием строк и столбцов для GitHub Code Scanning, GitHub Action и pre-commit hook. Секреты маскируются во всех форматах отчётов, а текстовый вывод очищается, чтобы сканируемый файл не мог внедрить escape-последовательности или команды CI-воркфлоу в ваш терминал или лог. - Релизы сверяются с их исходным кодом. Чистая стандартная библиотека
Python 3.11+ без зависимостей времени выполнения. Прежде чем релиз попадёт на
PyPI, каждый файл Credactor в wheel и sdist сравнивается побайтово с
исходным кодом из тега, а метаданные пакета должны соответствовать
pyproject.toml(см. Усиление защиты цепочки поставок).
Где он не является подходящим инструментом сам по себе: его встроенные правила охватывают форматы учётных данных, которые утекают чаще всего, а не сотни провайдеров, и он не проверяет, является ли секрет действующим. Чистый запуск означает, что ничто не совпало с его правилами, а не что в коде нет секретов. Сочетайте его со специализированным сканером для широты охвата (см. Подключите свой сканер).
Установка
pip install credactor
С помощью uv установите его как инструмент или запустите один раз без установки:
uv tool install credactor
uvx credactor --dry-run .
Или с помощью Homebrew на macOS и Linux:
brew install rxb06/tap/credactor
Требуется Python 3.11 или новее. Протестировано в CI на Linux и Windows, Python 3.11–3.13. Для файлов в кодировках, отличных от UTF-8, Latin-1 или простого UTF-16, добавьте опциональное дополнение: pip install 'credactor[encoding]' или uv tool install 'credactor[encoding]' (формула Homebrew включает его).
Быстрый старт
1. Посмотрите, что он находит. Ничего не изменяется.
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]"
В отчётах показываются только первые четыре символа каждого секрета.
2. Исправьте их. Сначала просмотрите найденные проблемы: --fix-all перезаписывает все, включая ложные срабатывания. Чтобы сохранить одну, добавьте # credactor:ignore в её строку
(см. Подавление ложных срабатываний) или исправьте
в интерактивном режиме, ответив n. Перед изменением каждого файла рядом с ним
записывается копия .bak, чтобы вы могли отменить изменения.
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
Режим Env записывает поиск, а не импорт: добавьте import os или эквивалент для вашего языка, если он отсутствует в файле. В Windows Git Bash запускайте интерактивный режим как winpty credactor ..
3. Проверьте, затем удалите резервные копии. Каждый файл .bak по-прежнему содержит исходный секрет, а Credactor никогда не редактирует ваш .gitignore, поэтому обычный git add . добавит его в индекс.
diff config.py.bak config.py # check what changed
cp config.py.bak config.py # undo
Добавьте *.bak и *.credactor.tmp в .gitignore и удалите резервные копии, когда
будете довольны результатом. Чтобы резервные копии изначально не попадали в дерево, передайте
--secure-backup-dir DIR (каталог вне репозитория) при запуске исправления.
--secure-delete вместо этого стирает каждую резервную копию, оставляя git вашим единственным
способом отмены.
Команды кратко
| Команда | Что она делает | Изменяет файлы |
|---|---|---|
credactor --dry-run . | Сообщает о находках | Нет |
credactor . | Просматривает и исправляет находки по одной | Да, при y |
credactor --fix-all . | Исправляет все находки после одного подтверждения | Да |
credactor --ci . | Шлюз: код выхода 1 при находках | Никогда |
credactor --staged --ci . | Шлюз только для того, что подготовлено к коммиту | Никогда |
credactor --scan-history . | Сканирует последние 100 коммитов, изменяющих файлы | Никогда |
credactor --ci -f sarif . > results.sarif | SARIF 2.1.0 для Code Scanning | Никогда |
credactor --ci -f json . > findings.json | Машиночитаемый отчёт | Никогда |
Каждый флаг и комбинация описаны в Руководстве.
Использование в pre-commit и CI
Хук pre-commit
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.7.5
hooks:
- id: credactor
pre-commit install
Каждый git commit затем сканирует проиндексированное содержимое и блокируется, если в нём обнаружены учётные данные. Хук никогда не перезаписывает файлы. Требуется pre-commit 3.2.0 или новее; без этого фреймворка см.
автономный хук.
GitHub Action
steps:
- uses: actions/checkout@v7
- uses: rxb06/[email protected]