Files
portal/.gitleaks.toml
T
Дмитрий 1da23b8253 chore(audit): finalize 2026-05-12 portal full audit
Полный аудит портала проведён в ночь 12.05.2026 на ветке plan5-frontend-projects.
9 phase'ов, 393 findings, 8 fix-commits, 4 BLOCKED-вопроса.

Артефакты:
- docs/superpowers/plans/2026-05-12-portal-full-audit.md — план
- docs/superpowers/audits/*-findings.md — все findings file:line + severity
- docs/superpowers/audits/*-blocked.md — 4 вопроса заказчику
- docs/superpowers/audits/*-report.md — summary с метриками до/после
- audit-screens/views/ — 24 UI smoke screenshots (Playwright)
- audit-screens/legacy/ — 32 untracked PNG из workdir
- app/database/seeders/DemoSeeder.php — idempotent seed
- .gitleaks.toml — allowlist для seeders/audit-docs (демо-фикстуры)
- cspell-words.txt — +12 audit-cited mixed-script artifacts

Метрики (Phase 1+2 baseline → Phase 9 final, все commits 3a8229a..57f0b8e):
- Histoire build BROKEN → 35 stories / 63 variants 
- ESLint 17 → 0 
- vue-tsc 9 → 0 
- Prettier 48 → 0 
- markdownlint 165 → 1 (untracked design.md) 
- cspell 103 → 18 → 0 (after audit-cited words added) 
- Vitest 614 → 614 (0 regression) 
- Pest --parallel 739/0/3 → 739/0/3 
- Vite build 1.80s 0 warnings → 1.72s 0 warnings 
- gitleaks 0 leaks (340 commits) 

🟢 GREEN.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 20:37:51 +03:00

151 lines
6.9 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Конфигурация gitleaks для проекта Лидерра
# Правило §5.2 правил Claude: запрет на ПДн / токены / API-ключи в коммитах
#
# ВАЖНО: gitleaks использует Go RE2, который НЕ поддерживает lookbehind/lookahead.
# Все правила ниже написаны без (?<=...), (?<!...), (?=...), (?!...).
# Границы — через \b (word boundary).
title = "gitleaks Лидерра"
# Расширяем встроенный набор правил gitleaks
[extend]
useDefault = true
# ============================================================================
# Кастомные правила для российского контекста (152-ФЗ + ПДн)
# ============================================================================
# 1. Российский телефонный номер +7XXXXXXXXXX (без маски)
[[rules]]
id = "ru-phone-unmasked"
description = "Российский телефон без маскирования (правило §5.1 правил Claude)"
regex = '''\b(?:\+?7|8)[\s\-]?\(?[34589]\d{2}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}\b'''
tags = ["pii", "phone", "152-fz"]
# 2. ИНН — 10 цифр (юр. лица) или 12 цифр (физ. лица)
[[rules]]
id = "ru-inn"
description = "Российский ИНН (10 или 12 цифр)"
regex = '''(?i)\b(?:inn|инн)[:=\s]+\d{10,12}\b'''
tags = ["pii", "ru-tax"]
# 3. ОГРН — 13 цифр (юр. лица) или 15 цифр (ИП)
[[rules]]
id = "ru-ogrn"
description = "Российский ОГРН/ОГРНИП (13 или 15 цифр)"
regex = '''(?i)\b(?:ogrn|огрн|огрнип)[:=\s]+\d{13,15}\b'''
tags = ["pii", "ru-tax"]
# 4. Российский паспорт (XX XX XXXXXX)
[[rules]]
id = "ru-passport"
description = "Российский паспорт RF (4 цифры серии + 6 цифр номера)"
regex = '''(?i)\b(?:passport|паспорт)[:=\s]+\d{4}\s?\d{6}\b'''
tags = ["pii"]
# 5. Email — детектируется default-правилами gitleaks. Дополнительно — через
# allowlist пропускаем известные плейсхолдеры (см. секцию allowlist ниже).
# 6. Yandex Cloud OAuth-token (формат `y0_...`)
[[rules]]
id = "yandex-cloud-oauth"
description = "Yandex Cloud OAuth/IAM-token"
regex = '''\by[0-9]_[A-Za-z0-9_-]{40,}\b'''
tags = ["secret", "yandex"]
# 7. Yandex Cloud API-key (формат AQVN...)
[[rules]]
id = "yandex-cloud-api-key"
description = "Yandex Cloud API-key"
regex = '''\bAQVN[A-Za-z0-9_-]{40,}\b'''
tags = ["secret", "yandex"]
# 8. Webhook signing secrets / HMAC keys
[[rules]]
id = "webhook-secret"
description = "Webhook signing secret (HMAC) с явным префиксом ключа"
regex = '''(?i)(?:webhook[_-]?(?:secret|token|signature)|signing[_-]?secret|hmac[_-]?key)[\s:=]+["']?[A-Za-z0-9_+/=\-]{20,}["']?'''
tags = ["secret"]
# ============================================================================
# Глобальный allowlist: что НЕ считать секретом
# ============================================================================
[allowlist]
description = "Что игнорировать (плейсхолдеры, тестовые данные, публичные реквизиты)"
paths = [
'''node_modules/''',
'''package-lock\.json''',
'''\.git/''',
'''bin/''',
'''cspell-words\.txt''',
'''\.gitleaks\.toml''',
# HTML-концепты handoff Платона (v8 Forest) — демо-данные для визуализации,
# не реальные ПДн. Дублирующие пути в liderra_v8_handoff/concepts/ и web/v8/
'''liderra_v8_handoff/concepts/.*\.html''',
'''web/v8/.*\.html''',
# Composer lock — содержит хеши/строки, иногда ловятся регулярками false-positive
'''app/composer\.lock''',
# Pest-тесты с фиктивными data-фикстурами (не реальные ПДн)
'''app/tests/.*\.php''',
# Database seeders с демо-данными (admin@demo.local + +7916123XXXX демо-телефоны)
'''app/database/seeders/.*\.php''',
# Audit-internal docs (findings/blocked/report/plan) — содержат демо-телефоны и
# script-смешанные artifacts как finding'и для review (не реальные ПДн)
'''docs/superpowers/audits/.*\.md''',
'''docs/superpowers/plans/.*\.md''',
# Mock-данные для UI-разводки фронтенда (фиктивные имена/телефоны)
'''app/resources/js/composables/mockDeals\.ts''',
# Vitest-тесты с assertion на mock-данные (mock-телефоны из mockDeals)
'''app/tests/Frontend/.*\.(spec|test)\.ts''',
# Settings-вкладки с фиктивными mock-данными (профиль/сессии — UI-разводка)
'''app/resources/js/views/settings/.*\.vue'''
]
regexTarget = "match"
regexes = [
# Маскированные ПДн (правило §5.1 правил Claude)
'''\+7XXXXXXXXXX''',
'''\+7\s\(\*{3}\)\s\*{3}-\*{2}-\d{2}''',
'''\*{3}@\*{3}''',
'''u\*{3}@d\*{3}''',
# Шаблонные плейсхолдеры из шаблонов оферты/РКН/брендбука
'''\{\{[a-z_]+\}\}''',
'''\[ИНН\]''',
'''\[ОГРН\]''',
'''\[АДРЕС\]''',
'''\[ФИО[^\]]*\]''',
'''\[БАНК\]''',
'''\[Р/С\]''',
'''\[К/С\]''',
'''\[БИК\]''',
# Известные публичные реквизиты Yandex Cloud (публичная информация)
'''7704458262''',
# Стандартные плейсхолдеры для test/example email (не считаются ПДн)
'''[a-zA-Z0-9._%+-]+@(?:example\.|test\.|localhost|.*\.local|.*\.test)[a-zA-Z0-9.-]*''',
'''noreply@.*''',
'''support@.*''',
# Тестовые/демо-токены
'''sk-test-[A-Za-z0-9]+''',
'''pk_test_[A-Za-z0-9]+''',
'''example_[a-z_]+_token''',
# Известные publicly known keys из документации (для embed-примеров)
'''xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx''',
'''YOUR_TOKEN_HERE''',
'''YOUR_API_KEY''',
# Тестовые/демо-номера телефонов (не настоящие ПДн)
'''(?:\+?7|8)\s?\(?9000\)?\s?[\s\-]?000[\s\-]?00[\s\-]?00''',
'''(?:\+?7|8)\s?\(?900\)?\s?123[\s\-]?45[\s\-]?67''',
'''(?:\+?7|8)\s?\(?XXX\)?\s?XXX[\s\-]?XX[\s\-]?XX''',
'''79000000000''',
'''79991234567''',
'''74955551212''',
'''89991234567''',
# Plan 2: ABC-коды городов с тестовым tail "1234567" (PhonePrefixService docs/tests)
'''7\d{3}1234567''',
'''799912345678''',
'''7999123456''',
'''\+79991234567''',
'''7 999 123 45 67''',
# 12-значные номера-маски для скриншотов и тестов
'''[78]\(?[*X]{3}\)?\s?[*X]{3}[\s\-]?[*X]{2}[\s\-]?[*X0-9]{2}'''
]