
Сканируй. Редактируй. Коммить чисто.
Найди секрет. Исправь его. Коммить чисто.
Сканеры секретов хорошо умеют поднимать тревогу, но почти не помогают её погасить. Они выдают вам список утёкших учётных данных и оставляют уборку за вами. Credactor замыкает цикл: он находит захардкоженный секрет и переписывает его на месте, так что утечка проходит путь от обнаружения до исправления одной командой.
Хранение учётных данных вне исходного кода — это базовая практика безопасности, а не опция. Credactor делает эту базу дешёвой в соблюдении: на вашей машине перед коммитом или в CI перед merge. Запускайте его отдельно или вместе со сканерами, которым вы уже доверяете.
# Credactor находит это:
db_password = "h8Tq2vKp9mRz4Wd"
# По умолчанию он переписывает секрет как sentinel, который громко падает во время выполнения:
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 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
Интеграция 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-----) | Критическая |
| JWT | eyJ… токены из трёх сегментов | Высокая |
| Строки подключения | 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.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]), так что проверять при установке нечего.--require-hashes, включая бэкенд сборки (python -m build --no-isolation против закреплённого setuptools), так что подменённая зависимость проваливает сборку.scripts/audit_wheel.py сравнивает wheel и sdist с закоммиченными исходниками побайтово (sha256 против git HEAD); любой добавленный, отсутствующий или изменённый файл проваливает шлюз, так что шаг сборки не может незаметно внедрить код.contents: read по умолчанию, id-token: write только для задания публикации.| Документ | Описание |
|---|---|
| Руководство по настройке | Установка, конфигурация, интеграция с CI/CD |
| Руководство | Полный справочник: каждый флаг, режим и комбинация, поведение замены и резервных копий, обнаружение и серьёзность, коды выхода и ограничения (поведение проверено тестами) |
| Примеры | Типовые рабочие процессы с выводом |
| Интеграция с CI | Pre-commit hooks, пайплайны CI |
| Безопасность | Модель угроз, меры укрепления, известные ограничения |
| Журнал изменений | История версий |
| Участие | Настройка разработки, стиль кода, процесс PR |
| Отказ от ответственности | Ограничения, безопасное использование, гарантия |
Apache 2.0. См. LICENSE.