Skip to content

How it works

No1se-pi edited this page Jul 10, 2026 · 1 revision

Как работает Custodes

Поток выполнения

git commit
    ↓
.git/hooks/pre-commit
    ↓
custodes check
    ↓
parser.py читает staged diff
    ↓
совпадение найдено → exit 1 → коммит остановлен
совпадений нет     → exit 0 → коммит продолжается

Что именно проверяется

Сканер получает список подготовленных файлов:

git diff --cached --name-only

Затем для каждого файла читает staged diff:

git diff --cached <file>

Проверяются только добавленные строки, начинающиеся с +. Служебная строка diff +++ исключается.

Каждая добавленная строка сравнивается с элементами banwords обычным регистрозависимым поиском подстроки.

Из чего состоит проект

Файл Назначение
installer.sh Устанавливает программу, виртуальное окружение и команду custodes
custodes.sh Реализует CLI, управление hooks, обновление и удаление
parser.py Получает staged diff и ищет запрещённые строки
messeges.py Хранит сообщения сканера и ASCII-логотип
.env Хранит пользовательские правила и настройки
requirements.txt Содержит Python-зависимости

Размещение после установки

~/.local/share/custodes/
├── .env
├── .venv/
├── custodes.sh
├── parser.py
├── messeges.py
├── README.md
└── requirements.txt

~/.local/bin/custodes

Файл ~/.local/bin/custodes — небольшой Bash-wrapper, который передаёт команду в основной custodes.sh.

Модель защиты

Custodes уменьшает риск случайного коммита секрета на рабочей машине разработчика. Защита действует до создания коммита, но остаётся локальной:

  • hook можно обойти с помощью git commit --no-verify;
  • hook не переносится при обычном клонировании репозитория;
  • простое совпадение строки не определяет все реальные секреты;
  • уже закоммиченные данные не анализируются.

Поэтому Custodes лучше использовать вместе с серверным secret scanning и проверками CI/CD.