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

credactor v2.6.0

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

Поделиться

PyPI CI License

Credactor

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

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

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

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

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

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

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


Зачем Credactor

  • Редактирование, а не только обнаружение. Большинство сканеров останавливаются на находке. Credactor заменяет секрет на месте: громкий sentinel REDACTED_BY_CREDACTOR, который падает во время выполнения по умолчанию, или языко-зависимая ссылка на переменную окружения (Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP и shell), например os.environ["KEY"]. Замена — это валидный код. Если в файле ещё нет соответствующего импорта (например, import os), добавьте его.
  • Безопасно по умолчанию. Атомарные записи, автоматические резервные копии .bak, защита от пересечения симлинков и прав на файлы, а также полное маскирование секретов во всех выводах. Если безопасную резервную копию записать нельзя, Credactor пропускает файл, а не переписывает его вслепую, и сбой в середине записи оставляет оригинал нетронутым.
  • Ноль зависимостей во время выполнения. Чистая стандартная библиотека Python 3.11+, плюс опциональный extra для не-UTF-8 кодировок.
  • Создан для пайплайна. Вывод SARIF для GitHub Code Scanning, read-only шлюз --ci с точными кодами выхода, pre-commit hook (бета) и приём отчётов 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 .                      # read-only шлюз: выход 1 при находках
credactor --replace-with env .        # редактировать в ссылки на переменные окружения вместо sentinel

Pre-commit hook (бета)

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

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/rxb06/credactor
    rev: v2.6.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="…" />Высокая/Средняя/Низкая
Строки с высокой энтропиейhex в кавычках (32–64 символа) / Base64 (60+ символов)Средняя/Низкая

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

Собственный набор правил Credactor уже, чем у выделенного сканера, и некоторые форматы провайдеров (например, SendGrid, Twilio и Slack webhooks) не обнаруживаются. Его преимущество — устранение: сочетайте его с 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) требуют целевой директории — укажите Credactor тот же корень, по которому работал сканер. Пути в отчёте разрешаются относительно рабочей директории, а отчёт — это снимок: перегенерируйте его после редактирования или изменения дерева. См. Руководство по интеграции с CI.

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

  • Интерактивное или пакетное редактирование; пользовательская строка замены через --replacement; --scan-history для сканирования истории git-коммитов
  • Безопасные резервные копии: --secure-delete (перезапись и удаление .bak; повышает планку против случайного восстановления, но не является криминалистической гарантией) или --secure-backup-dir для хранения резервных копий вне репозитория
  • Инлайновые # credactor:ignore и allowlist .credactorignore (glob-шаблоны, 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 не тянет сторонних пакетов (только опциональный extra [encoding]), так что проверять при установке нечего.
  • Хэш-закреплённый тулчейн. CI и сборки релизов устанавливают из lockfile с --require-hashes, включая бэкенд сборки (python -m build --no-isolation против закреплённого setuptools), так что подменённая зависимость проваливает сборку.
  • Артефакты побайтово сверяются с исходниками. При каждом push и перед каждой публикацией scripts/audit_wheel.py сравнивает wheel и sdist с закоммиченными исходниками побайтово (sha256 против git HEAD); любой добавленный, отсутствующий или изменённый файл проваливает шлюз, так что шаг сборки не может незаметно внедрить код.
  • SHA-закреплённый CI с минимальными правами. GitHub Actions закреплены за SHA коммитов, а токены workflow остаются узкими — contents: read по умолчанию, id-token: write только для задания публикации.

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

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

Лицензия

Apache 2.0. См. LICENSE.

Категории