
Сканируй. Редактируй. Коммить чисто.
Найди секрет. Исправь его. Коммить чисто.
Сканеры секретов хороши в том, чтобы бить тревогу, но почти не помогают её потушить. Они выдают список утекших учётных данных, а всю чистку оставляют вам. Credactor замыкает цикл: он находит жёстко закодированный секрет и перезаписывает его на месте, так что утечка превращается из обнаружения в исправление одной командой.
Хранение учётных данных в исходном коде — это базовая практика безопасности, а не опциональная. Credactor делает соблюдение этой практики дешёвым — на вашей машине перед коммитом или в CI перед слиянием. Запускайте его отдельно или вместе с уже используемыми сканерами.
# Credactor находит это:
db_password = "h8Tq2vKp9mRz4Wd"
# По умолчанию он перезаписывает секрет как страж, который громко падает во время выполнения:
db_password = "REDACTED_BY_CREDACTOR"
# С флагом --replace-with env он записывает ссылку, читающую из окружения:
db_password = os.environ["DB_PASSWORD"]
Редактирование перезаписывает файлы в вашем рабочем дереве. Если секрет уже был закоммичен, также отзовите ключ и очистите историю (например, с помощью
git filter-repo). Перезапись файла не заменяет отзыв скомпрометированных учётных данных.
REDACTED_BY_CREDACTOR, который падает во время выполнения по умолчанию, или учитывающая язык ссылка на переменную окружения (Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP и shell) вида os.environ["KEY"]. Замена является валидным кодом. Если в файле ещё нет соответствующего импорта (например, import os), добавьте его..bak, защита от пересечения границ симлинков и прав доступа к файлам, полное маскирование секретов в каждом выводе. Если безопасную резервную копию записать невозможно, Credactor пропускает файл, а не перезаписывает вслепую; сбой во время записи оставляет оригинал нетронутым.--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 . # редактировать в ссылки на переменные окружения вместо стража
Интеграция хука находится в стадии бета. Перед тем как полагаться только на него, выполните
credactor --dry-run .вручную.
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.5.0 # зафиксировать последний тег релиза
hooks:
- id: credactor
Credactor обнаруживает типы учётных данных, которые утекают чаще всего, и присваивает каждому уровень серьёзности для быстрой сортировки.
Детерминированные токены провайдеров (префиксы выше) помечаются независимо от энтропии. Эвристические детекторы (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.txt); --scan-json для включения JSON; --fail-on-error для завершения с ошибкой, если файл не удаётся прочитать
.py.js.ts.jsx.tsx.sh.bash.env.cfg.ini.toml.yaml.yml.rb.go.java
Плюс варианты .env.* / .env-* (.env.local, .env.production) и файлы SSH/приватных ключей (id_rsa, id_dsa, id_ecdsa, id_ed25519), все определяются по имени файла, а не по расширению. JSON исключён по умолчанию, так как ответы API дают высокий уровень ложных срабатываний; добавьте --scan-json для его включения. Файл, указанный непосредственно в командной строке, сканируется, даже если его расширение отсутствует в списке.
| Код | Значение |
|---|---|
0 | Нет находок, или все устранены |
Инструмент безопасности должен быть безопасным не только при запуске, но и при установке. Конвейер сборки и выпуска Credactor укреплён от начала до конца; полные сведения в документе по безопасности.
pip install credactor не загружает сторонних пакетов (только необязательное расширение [encoding]), так что проверять во время установки нечего.--require-hashes, включая сборочный бэкенд (python -m build --no-isolation с закреплённым setuptools), так что подделанная зависимость не пройдёт сборку.scripts/audit_wheel.py сравнивает wheel и sdist с закоммиченным исходным кодом побайтово (sha256 против git HEAD); любой добавленный, отсутствующий или изменённый файл блокирует шлюз, поэтому шаг сборки не может незаметно внедрить код.contents: read по умолчанию, id-token: write только для задания публикации.Apache 2.0. См. LICENSE.
| Категория | Примеры | Серьёзность |
|---|
| Ключи облачных провайдеров | AWS (AKIA…), GCP (AIza…), Stripe (sk_live_…), Slack (xoxb-…) | Критический |
| Токены платформ | GitHub (ghp_, github_pat_), GitLab (glpat-), npm (npm_), PyPI (pypi-) | Критический |
| Приватные ключи | Блоки PEM (-----BEGIN … PRIVATE KEY-----) | Критический |
| JWT | eyJ… трёхсегментные токены | Высокий |
| Строки подключения | URL с встроенными учётными данными (scheme://user:pass@host) | Высокий |
| Переменные с учётными данными | password = "…", api_key = "…", secret_key = "…" | Высокий/Средний/Низкий |
| XML-атрибуты | <add key="Password" value="…" /> | Высокий/Средний/Низкий |
| Строки с высокой энтропией | шестнадцатеричные строки в кавычках (32–64 символов) / Base64 (60+ символов) | Средний/Низкий |
.php.cs.kt.tf.hcl.conf.config.properties.xml.pem.key.crt.txt1 | Неустранённые находки |
2 | Ошибка (например: неверный путь, опасный --replacement, --ci --fix-all или --fail-on-error с нечитаемым файлом) |
| Документ | Описание |
|---|
| Руководство по настройке | Установка, конфигурация, интеграция CI/CD |
| Руководство | Полный справочник: каждый флаг, режим и комбинация, поведение замены и резервного копирования, обнаружение и степень серьёзности, коды выхода и ограничения (поведение проверено тестами) |
| Примеры | Типовые рабочие процессы с выводом |
| Интеграция CI | Хуки pre-commit, конвейеры CI |
| Безопасность | Модель угроз, меры усиления защиты, известные ограничения |
| Журнал изменений | История версий |
| Участие в разработке | Настройка окружения для разработки, стиль кода, процесс PR |
| Отказ от ответственности | Ограничения, безопасное использование, гарантия |