Назад к обновлениям
New releaseAug 22, 2026

credactor v2.6.0

Сканируй. Редактируй. Коммить чисто.

Поделиться

PyPI CI License

Credactor

Найди секрет. Исправь его. Коммить чисто.

Сканеры секретов хороши в том, чтобы бить тревогу, но почти не помогают её потушить. Они выдают список утекших учётных данных, а всю чистку оставляют вам. Credactor замыкает цикл: он находит жёстко закодированный секрет и перезаписывает его на месте, так что утечка превращается из обнаружения в исправление одной командой.

Хранение учётных данных в исходном коде — это базовая практика безопасности, а не опциональная. Credactor делает соблюдение этой практики дешёвым — на вашей машине перед коммитом или в CI перед слиянием. Запускайте его отдельно или вместе с уже используемыми сканерами.

Credactor: сканируй, редактируй, коммить чисто
# Credactor находит это:
db_password = "h8Tq2vKp9mRz4Wd"

# По умолчанию он перезаписывает секрет как страж, который громко падает во время выполнения:
db_password = "REDACTED_BY_CREDACTOR"

# С флагом --replace-with env он записывает ссылку, читающую из окружения:
db_password = os.environ["DB_PASSWORD"]

Редактирование перезаписывает файлы в вашем рабочем дереве. Если секрет уже был закоммичен, также отзовите ключ и очистите историю (например, с помощью git filter-repo). Перезапись файла не заменяет отзыв скомпрометированных учётных данных.


Зачем Credactor

  • Редактирование, а не только обнаружение. Большинство сканеров останавливаются на находке. Credactor заменяет секрет на месте: громкий страж REDACTED_BY_CREDACTOR, который падает во время выполнения по умолчанию, или учитывающая язык ссылка на переменную окружения (Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP и shell) вида os.environ["KEY"]. Замена является валидным кодом. Если в файле ещё нет соответствующего импорта (например, import os), добавьте его.
  • Безопасность по умолчанию. Атомарная запись, автоматические резервные копии .bak, защита от пересечения границ симлинков и прав доступа к файлам, полное маскирование секретов в каждом выводе. Если безопасную резервную копию записать невозможно, Credactor пропускает файл, а не перезаписывает вслепую; сбой во время записи оставляет оригинал нетронутым.
  • Нулевые зависимости времени выполнения. Чистая стандартная библиотека Python 3.11+, плюс необязательное расширение для кодировок, отличных от UTF-8.
  • Создан для конвейера. Вывод SARIF для GitHub Code Scanning, режим только для чтения --ci с точными кодами выхода, хук pre-commit (бета) и импорт отчётов Gitleaks или TruffleHog (БЕТА, и другие в разработке). Обнаруживайте с Gitleaks или TruffleHog, исправляйте с Credactor.

Установка

pip install credactor

Требуется Python 3.11+. Других зависимостей нет. Работает на Linux, macOS и Windows (протестировано в CI на Linux и Windows).

Из исходников:

git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .

После этого credactor работает из любой директории.

Быстрый старт

Сначала выполните --dry-run и просмотрите результаты перед редактированием. Возможны ложные срабатывания, и при --fix-all ложное срабатывание будет перезаписано. Подавляйте заведомо безопасные значения с помощью # credactor:ignore или записи в .credactorignore.

credactor --dry-run .                 # сканировать, ничего не менять
credactor .                           # сканировать, затем редактировать интерактивно (y/n на каждую находку)
credactor --fix-all .                 # редактировать всё после одного подтверждения
credactor --fix-all --yes .           # редактировать неинтерактивно (CI / скрипты)
credactor --ci .                      # шлюз только для чтения: выход 1 при находках
credactor --replace-with env .        # редактировать в ссылки на переменные окружения вместо стража

Хук pre-commit (бета)

Интеграция хука находится в стадии бета. Перед тем как полагаться только на него, выполните credactor --dry-run . вручную.

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/rxb06/credactor
    rev: v2.5.0   # зафиксировать последний тег релиза
    hooks:
      - id: credactor

Обнаружение

Credactor обнаруживает типы учётных данных, которые утекают чаще всего, и присваивает каждому уровень серьёзности для быстрой сортировки.

КатегорияПримерыСерьёзность
Ключи облачных провайдеровAWS (AKIA…), GCP (AIza…), Stripe (sk_live_…), Slack (xoxb-…)Критический
Токены платформGitHub (ghp_, github_pat_), GitLab (glpat-), npm (npm_), PyPI (pypi-)Критический
Приватные ключиБлоки PEM (-----BEGIN … PRIVATE KEY-----)Критический
JWTeyJ… трёхсегментные токеныВысокий
Строки подключенияURL с встроенными учётными данными (scheme://user:pass@host)Высокий
Переменные с учётными даннымиpassword = "…", api_key = "…", secret_key = "…"Высокий/Средний/Низкий
XML-атрибуты<add key="Password" value="…" />Высокий/Средний/Низкий
Строки с высокой энтропиейшестнадцатеричные строки в кавычках (32–64 символов) / Base64 (60+ символов)Средний/Низкий

Детерминированные токены провайдеров (префиксы выше) помечаются независимо от энтропии. Эвристические детекторы (JWT, строки подключения, hex, Base64) должны пройти порог энтропии. Отдельные hex- или Base64-строки помечаются только если они в кавычках. Незакавыченное значение с высокой энтропией обнаруживается только на переменной с именем, содержащим учётные данные, что исключает SHA коммитов и контрольные суммы. Полные правила обнаружения и серьёзности см. в Руководстве.

Встроенный набор правил Credactor уже, чем у специализированного сканера, и некоторые форматы провайдеров (например, SendGrid, Twilio и вебхуки Slack) не обнаруживаются. Его сила — в исправлении: используйте вместе с Gitleaks или TruffleHog для максимально широкого обнаружения или запускайте отдельно.

Используйте совместно с другим сканером, редактируйте всё (БЕТА)

Credactor работает сам по себе, но становится сильнее в компании. Уже используете Gitleaks или TruffleHog? Передайте их отчёт Credactor, и он отредактирует объединённый набор, удалив дубликаты с собственными находками (при совпадении побеждает более высокая серьёзность). Один проход исправления покрывает ваш скан и их:

gitleaks dir . -f json -r gitleaks.json
credactor --from-gitleaks gitleaks.json --fix-all --yes .

--from-gitleaks / --from-trufflehog (или таблица [ingest] в .credactor.toml) требуют указания целевой директории. См. Руководство по интеграции CI.

Дополнительные возможности

  • Интерактивное или пакетное редактирование; пользовательская строка замены через --replacement; --scan-history для сканирования истории коммитов git
  • Безопасные резервные копии: --secure-delete (перезапись и удаление .bak; повышает планку для случайного восстановления, но не является криминалистической гарантией) или --secure-backup-dir для хранения резервных копий вне репозитория
  • Белые списки через # credactor:ignore и .credactorignore (глобусы, file:line, литералы значений)
  • Конфигурация на репозиторий через .credactor.toml
  • 29 типов исходных/конфигурационных/заметочных файлов «из коробки» (включая .txt); --scan-json для включения JSON; --fail-on-error для завершения с ошибкой, если файл не удаётся прочитать

Сканируемые типы файлов

.py .js .ts .jsx .tsx .sh .bash .env .cfg .ini .toml .yaml .yml .rb .go .java .php .cs .kt .tf .hcl .conf .config .properties .xml .pem .key .crt .txt

Плюс варианты .env.* / .env-* (.env.local, .env.production) и файлы SSH/приватных ключей (id_rsa, id_dsa, id_ecdsa, id_ed25519), все определяются по имени файла, а не по расширению. JSON исключён по умолчанию, так как ответы API дают высокий уровень ложных срабатываний; добавьте --scan-json для его включения. Файл, указанный непосредственно в командной строке, сканируется, даже если его расширение отсутствует в списке.

Коды завершения

КодЗначение
0Нет находок, или все устранены
1Неустранённые находки
2Ошибка (например: неверный путь, опасный --replacement, --ci --fix-all или --fail-on-error с нечитаемым файлом)

Укрепление цепочки поставок

Инструмент безопасности должен быть безопасным не только при запуске, но и при установке. Конвейер сборки и выпуска Credactor укреплён от начала до конца; полные сведения в документе по безопасности.

  • Нулевые зависимости времени выполнения. Обычная pip install credactor не загружает сторонних пакетов (только необязательное расширение [encoding]), так что проверять во время установки нечего.
  • Хэш-закреплённый инструментарий. CI и сборки релизов используют lockfile с --require-hashes, включая сборочный бэкенд (python -m build --no-isolation с закреплённым setuptools), так что подделанная зависимость не пройдёт сборку.
  • Побайтовая проверка артефактов на соответствие исходному коду. При каждом пуше и перед каждой публикацией scripts/audit_wheel.py сравнивает wheel и sdist с закоммиченным исходным кодом побайтово (sha256 против git HEAD); любой добавленный, отсутствующий или изменённый файл блокирует шлюз, поэтому шаг сборки не может незаметно внедрить код.
  • SHA-закреплённый, минимально привилегированный CI. Действия GitHub Actions закреплены по SHA коммитов, а токены рабочих процессов остаются узкими — contents: read по умолчанию, id-token: write только для задания публикации.

Документация

ДокументОписание
Руководство по настройкеУстановка, конфигурация, интеграция CI/CD
РуководствоПолный справочник: каждый флаг, режим и комбинация, поведение замены и резервного копирования, обнаружение и степень серьёзности, коды выхода и ограничения (поведение проверено тестами)
ПримерыТиповые рабочие процессы с выводом
Интеграция CIХуки pre-commit, конвейеры CI
БезопасностьМодель угроз, меры усиления защиты, известные ограничения
Журнал измененийИстория версий
Участие в разработкеНастройка окружения для разработки, стиль кода, процесс PR
Отказ от ответственностиОграничения, безопасное использование, гарантия

Лицензия

Apache 2.0. См. LICENSE.

Категории