Поиск секретов
Функционал доступен в Self-hosted версиях GitFlic
Поиск секретов (Secrets Detection) — это процесс автоматического обнаружения чувствительных данных, таких как пароли, ключи, токены доступа и другие конфиденциальные настройки, которые могут случайно попасть в исходный код, конфигурационные файлы или другие артефакты разработки. Наличие таких секретов в репозитории может представлять угрозу безопасности, поэтому важно их своевременно выявлять и удалять.
Чтобы минимизировать риск появления секретов в коммитах, рекомендуется использовать Gitleaks — это SAST-инструмент с открытым исходным кодом, разработанный для поиска секретов в коде.
Интеграция Gitleaks с GitFlic через использование pre-receive
хука
pre-receive хуки — это скрипты, которые запускаются на сервере Git перед принятием новых коммитов. Они позволяют проверять входящие изменения и отклонять их при нарушении условий, например, если найдены секреты.
Установка Gitleaks
Чтобы интегрировать Gitleaks в ваш рабочий процесс, его нужно установить на сервере с GitFlic, где будут выполняться pre-receive хуки. Инструкции по установке доступны в официальном репозитории Gitleaks.
Пример установки Gitleaks на Linux (Ubuntu):
apt update
apt install gitleaks
После успешной установки вы можете настроить хук для автоматической проверки каждого коммита на наличие секретов перед его приёмом в репозиторий.
Структура хуков в GitFlic
На сервере с GitFlic, в котором размещён ваш Git-репозиторий, хуки хранятся в директории проекта. При стандартной инсталляции GitFlic, путь до директории хуков выглядит примерно так: /var/tmp/gitflic/repo/c20242c3-1234-5678-90ab-49afff94c56c.git/hooks
, где c20242c3-1234-5678-90ab-49afff94c56c
— uuid проекта. В этой папке хранятся все исполняемые скрипты, которые выполняются при возникновении соответствующего события (например, pre-receive, post-receive и другие).
Каждый файл хука должен быть назван в соответствии с его типом. Если вы хотите создать pre-receive хук, файл скрипта должен быть назван pre-receive и должен иметь права на выполнение.
Пример использования gitleaks с помощью pre-reсeive
хука
Ниже приведён пример скрипта pre-receive хука, который проверяет новые коммиты на наличие секретов с использованием Gitleaks.
Создайте в директории хуков hooks
файл pre-receive
:
#!/bin/bash
echo "Check commits for secrets"
zero_commit="0000000000000000000000000000000000000000"
excludeExisting="--not --all"
while read old_sha new_sha refname; do
echo "$old_sha $new_sha $refname"
# Check for new branch
if [ "$old_sha" = "$zero_commit" ]; then
new_commits=(`git rev-list $new_sha $excludeExisting`)
else
new_commits=(`git rev-list $old_sha..$new_sha $excludeExisting`)
fi
output=$(gitleaks git -v --log-opts="${new_commits[-1]}^! ${new_commits[0]}" --exit-code 1 ../ 2>&1)
#код возврата последнего процесса
status=$?
if [ $status -ne 0 ]; then
echo "$output"
exit 1
fi
done
exit 0
Сделайте файл исполняемым:
chmod +x pre-receive
Теперь при каждой отправке изменений в репозиторий будет срабатывать данный скрипт.
Как он работает:
- Скрипт считывает диапазон новых коммитов, которые должны быть проверены.
- Проверка на новую ветку: Если ветка создаётся заново, проверяются все коммиты в этой ветке. В противном случае проверяются только коммиты, добавленные в процессе слияния или изменений.
- Запуск Gitleaks: Для каждого коммита запускается Gitleaks с опцией –exit-code 1, чтобы остановить процесс, если найдены секреты.
- Отклонение изменений: Если в коммитах обнаружены секреты, хук выводит результат проверки и прерывает процесс, возвращая код ошибки 1, который блокирует приём коммитов на сервере.