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

credactor v2.6.0

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

Поделиться

PyPI CI License

Credactor

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

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

Credactor: scan, redact, commit clean Держать учётные данные вне исходного кода — это базовая практика безопасности, а не опциональная. Credactor делает соблюдение этой базовой практики дешёвым: на вашей машине до коммита или в CI до слияния. Запускайте его отдельно или вместе со сканерами, которым вы уже доверяете.
# Credactor finds this:
db_password = "h8Tq2vKp9mRz4Wd"

# By default it rewrites the secret as a sentinel that fails loudly at runtime:
db_password = "REDACTED_BY_CREDACTOR"

# With --replace-with env, it writes a reference that reads from the environment:
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, read-only шлюз --ci с точными кодами выхода, pre-commit хук и приём отчётов Gitleaks, TruffleHog или Betterleaks. Обнаруживайте сканером, который вы уже запускаете, устраняйте с помощью Credactor.

Установка

pip install credactor

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

На macOS и Linux его можно установить через Homebrew:

brew install rxb06/tap/credactor

Формула устанавливает в собственный virtualenv и включает опциональное дополнение [encoding], так что установка через Homebrew также обнаруживает секреты в не-UTF-8 файлах. Обычный pip install credactor не включает это дополнение; добавьте его с помощью pip install 'credactor[encoding]', если хотите такое же покрытие.

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

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

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

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

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

credactor --dry-run .                 # scan, change nothing
credactor .                           # scan, then redact interactively (y/n per finding)
credactor --fix-all .                 # redact everything after one confirmation
credactor --fix-all --yes .           # redact non-interactively (CI / scripts)
credactor --ci .                      # read-only gate: exit 1 on findings
credactor --replace-with env .        # redact to env-var references instead of the sentinel

Pre-commit хук

Хук проверяет только проиндексированное содержимое, поэтому уже закоммиченный секрет не будет помечен повторно. Используйте credactor --scan-history ., чтобы проверить то, что уже находится в репозитории.

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/rxb06/credactor
    rev: v2.7.4   # pin to the latest release tag
    hooks:
      - id: credactor

GitHub Action

- uses: rxb06/[email protected]

Действие всегда передаёт --ci, поэтому оно сообщает и блокирует, но никогда не переписывает checkout. Находки приводят к провалу шага; установите fail-on-findings: false, чтобы сообщать без блокировки. Ошибка приводит к провалу шага в любом случае.

Загрузка в Code Scanning вместо провала при находках:

- uses: rxb06/[email protected]
  with:
    format: sarif
    upload-sarif: true
    fail-on-findings: false

Для загрузки заданию нужны permissions: security-events: write. См. руководство по интеграции с CI для всех входных параметров, включая приём отчётов Gitleaks, TruffleHog и Betterleaks.

Обнаружение

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

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

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

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

Объедините с другим сканером и отредактируйте всё

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

Категории