/
ievlev
/
TOP-AI
Обзор
Документация
Войти
/
ievlev
/
TOP-AI
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/pre-commit
58 строк
2 KB
KIevlev
stands: зафиксировать контракт стендов, генераторов данных и проверок
27 июл 2026, 21:23
27 июл 2026, 21:23
74b8d87
Код
Авторство
О чём код?
#!/usr/bin/env bash # Проверка индексированных изменений на реквизиты доступа и внутренние # адреса перед коммитом. # # Установка: # ln -s ../../scripts/pre-commit .git/hooks/pre-commit # Обход в исключительном случае (например, документируемый пример): # git commit --no-verify set -uo pipefail fail=0 staged=$(git diff --cached --name-only --diff-filter=ACM) [[ -z "$staged" ]] && exit 0 # Текстовые файлы: ищем адреса, внутренние имена и реквизиты в самом diff. patterns=( '(^|[^0-9.])(10|172|192)\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' '[A-Za-z0-9_-]+\.(cloud\.ru|mtuci\.[a-z.]+|stud\.[a-z.]+)' '(password|пароль|passwd)[[:space:]]*[:=]' '(guest|monitor|admin|root)[[:space:]]*/[[:space:]]*[^[:space:]]{3,}' 'QWE[0-9]{3}' ) for pattern in "${patterns[@]}"; do hits=$(git diff --cached -U0 | grep -E '^\+' | grep -Ev '^\+\+\+' \ | grep -Ei "$pattern" || true) if [[ -n "$hits" ]]; then echo "[pre-commit] Обнаружены возможные реквизиты или внутренние адреса:" echo "$hits" | sed 's/^/ /' fail=1 fi done # PDF-вложения проверяем отдельным сканером: их текст сжат. pdfs=$(echo "$staged" | grep -i '\.pdf$' || true) if [[ -n "$pdfs" ]]; then while IFS= read -r pdf; do [[ -f "$pdf" ]] || continue if ! python3 scripts/scan-pdf-secrets.py "$pdf" >/tmp/pdfscan.log 2>&1; then echo "[pre-commit] В PDF найдены совпадения: $pdf" sed 's/^/ /' /tmp/pdfscan.log fail=1 fi done <<< "$pdfs" fi if [[ "$fail" -ne 0 ]]; then cat <<'EOF' Коммит остановлен. Замените адреса и реквизиты на плейсхолдеры (<STAND_HOST>, <BROKER>, $S3_ACCESS_KEY); значения храните в .env. Правила: CONTRIBUTING.md, раздел «Безопасность материалов». EOF exit 1 fi exit 0