Files
152-fz-scanner/STRATEGY.md
T
neo b9db935389 v2.0: исправлены критические баги, добавлены 4 новые проверки, 4-фазный cookie-аудит, retry-логика, YAML-словари, LLM-анализ, тесты
Исправлено:
- engine: _calculate_score() при ошибке загрузки (score не 100 для мёртвых сайтов)
- privacy_link: замена page.goto() на aiohttp (гонка данных)
- form_checkbox: 3-уровневый поиск label + dark-pattern detection
- server_location: синхронный urllib → aiohttp
- api/server: перепутанные request/response модели в batch
- main.py: csv --checks флаг
- engine: фазовая модель (cookie_audit отдельно, остальные параллельно)
- engine: retry-логика (3 попытки, exponential backoff)
- PDF: emoji заменены на текст (WeasyPrint)

Добавлено:
- consent_doc: проверка отдельного согласия на обработку ПД
- operator_info: проверка ИНН/ОГРН/DPO (читает главную + политику)
- cookie_audit: 4-фазный аудит (load→detect→reject→compare)
- llm_policy: опциональный LLM-анализ 16 разделов (--deep)
- external_scripts: YAML-словари trackers.yaml (critical/warning/russian)
- logging (output.py), .gitignore, pyproject.toml
- smoke-тесты (16/16)
2026-06-10 00:49:07 +05:00

347 lines
20 KiB
Markdown
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.
# 152-ФЗ Scanner: Стратегия эффективного compliance-сервиса
> Исследование проведено 10.06.2026. Проанализированы: 13 российских конкурентов,
> 4 международных open-source сканера, 5 чек-листов 152-ФЗ, технические best practices.
---
## 1. Рыночный контекст: почему сейчас
### 1.1. Ужесточение законодательства
| Дата | Изменение |
|------|-----------|
| 30.05.2025 | Штрафы ×10-20. Оборотные штрафы до 3% выручки, до 500 млн ₽ |
| 01.07.2025 | Запрет сбора ПД на зарубежных серверах — GA, reCAPTCHA, Google Fonts |
| 01.09.2025 | Согласие — отдельный документ. Нельзя включать в оферту |
| 11.12.2024 | Ст. 272.1 УК РФ — уголовная ответственность до 10 лет |
| 2026 | РКН: проактивный ИИ-мониторинг 24/7, 84% нарушений — автофиксация |
**Ключевое:** РКН перешёл от реактивной модели (жалобы) к проактивной (ИИ-мониторинг). 1000+ сайтов ежедневно. 83% проверенных сайтов имеют нарушения [1].
### 1.2. Размер рынка
- Каждый сайт с формой/аналитикой/cookies — оператор ПД
- Это 99% коммерческих сайтов в РФ
- Только отелей в Уфе: 50+ (протестировано в рамках 152-fz-scanner)
- Всего юрлиц в РФ: ~3 млн. Сайтов у них: ~500K+
---
## 2. Конкурентный анализ
### 2.1. Российские сканеры
| Сервис | Проверок | Цена | Фишки | Слабые места |
|--------|----------|------|-------|-------------|
| **Toolfox.ru** | 134 (11 законов) | Бесплатно | AI (Claude), PDF, баллы, ФЗ-53 | Закрытый, нет API |
| **scanetika.ru** | 38+ | Подписка | Мониторинг, 200K+ сайтов, B2B | Нет self-hosted |
| **EdLegal** | 21 | freemium | AI-анализ политики, расчёт штрафов | Мало проверок |
| **152-audit.ru** | ~15 | Бесплатно | Быстро, 3 мин | Базовый |
| **help152.ru** | 30+ законов | Бесплатно | Широкий охват | Слабый UI |
| **audit-pd.ru** | 15+ | Бесплатно | 30 сек | Базовый |
| **proverito.ru** | 16 | Бесплатно | Нейросеть, PDF | Мало проверок |
| **fzscan.ru** | ~10 | Бесплатно | 152 + 168 | Слабый |
| **reactortech.ru** | ~15 | Платно | Скриншоты, конкретика | Дорого |
| **nima-labs.ru** | ~12 | Платно | Генератор документов | Не сканер |
### 2.2. Международные open-source (GDPR)
| Проект | Правил | Технологии | Что можно заимствовать |
|--------|--------|-----------|----------------------|
| **ComplyTest** [2] | 70 (GDPR+WCAG+Security+DSA) | Node.js, Playwright, npx | CI/CD, SARIF, multi-format |
| **gdpr-cookie-scanner** [3] | 4D scoring | CLI, Playwright, Docker | 4-фазный скан, dark patterns |
| **GDPR Scanner** | ~10 | Python/Flask | Dashboard, scheduled scans |
| **EDPB Tool** | ~20 | EU official | Методология аудита |
| **LawCheck (РФ)** [4] | 152-ФЗ | FastAPI+Playwright+PostgreSQL+Redis+RQ | Архитектура, очереди |
### 2.3. Ниши без конкуренции
1. **API-first сканер** — все конкуренты form-based. Никто не даёт REST API для интеграции
2. **Self-hosted / on-premise** — LawCheck open-source, но без мониторинга и PDF
3. **White-label для агентств** — scanetika имеет B2B, но без white-label
4. **Пакетные проверки для хостингов/регистраторов** — не покрыто
5. **CI/CD интеграция** — для devops-команд (как ComplyTest, но для 152-ФЗ)
---
## 3. Полный список проверок для эффективного сканера
На основе синтеза чек-листов Reova (37 пунктов) [1], Proverito (16), EdLegal (21), Toolfox (134 включая смежные законы), LawCheck и международных best practices.
### 3.1. Категория A: Политика конфиденциальности (8 проверок)
| # | Проверка | Метод | Риск |
|---|----------|-------|------|
| A1 | Наличие страницы политики | Playwright: поиск ссылки → проверка 200 OK | HIGH |
| A2 | Доступность без авторизации | Проверка HTTP-статуса (не 401/403) | CRITICAL |
| A3 | Отдельная HTML-страница (не PDF) | Content-Type != application/pdf | HIGH |
| A4 | Ссылка в футере каждой страницы | DOM-анализ footer > a[href] | HIGH |
| A5 | Ссылка рядом с каждой формой | Поиск <form> → соседний <a> с политикой | HIGH |
| A6 | 16 обязательных разделов (LLM) | LLM-анализ текста политики: цели, категории, сроки, права, DPO, etc. | MEDIUM |
| A7 | Дата последнего обновления | Regex: дата в формате DD.MM.YYYY | MEDIUM |
| A8 | Реквизиты оператора (ИНН, адрес) | Regex ИНН (10/12 цифр) + сверка с ЕГРЮЛ | CRITICAL |
### 3.2. Категория B: Cookie-баннер и согласие (5 проверок)
| # | Проверка | Метод | Риск |
|---|----------|-------|------|
| B1 | Наличие баннера | CSS-селекторы + текстовые паттерны | HIGH |
| B2 | Баннер до установки tracking-cookies | 4-фазный метод (gdpr-cookie-scanner): загрузить без действий → посмотреть cookies | CRITICAL |
| B3 | Кнопка «Отказаться» (не только «Принять») | Dark-pattern detection: асимметрия кнопок | CRITICAL |
| B4 | Отказ отключает tracking-cookies | Фаза 3: нажать «Отказ» → проверить cookies | CRITICAL |
| B5 | Ссылка на политику в баннере | Поиск <a> внутри cookie-баннера | MEDIUM |
### 3.3. Категория C: Формы и чекбоксы (5 проверок)
| # | Проверка | Метод | Риск |
|---|----------|-------|------|
| C1 | Чекбокс в каждой форме | Поиск <form> → input[type=checkbox] | CRITICAL |
| C2 | Чекбокс НЕ предзаполнен | checked=false (dark pattern detection) | CRITICAL |
| C3 | Текст согласия содержит обязательные элементы | Regex: «согласие», «обработка», «персональные данные» + ссылка на политику | CRITICAL |
| C4 | Форма передаётся по HTTPS | Проверка form[action] → HTTPS | HIGH |
| C5 | Минимизация полей (только необходимые) | Подсчёт полей → оценка избыточности | MEDIUM |
### 3.4. Категория D: Сервер и инфраструктура (4 проверки)
| # | Проверка | Метод | Риск |
|---|----------|-------|------|
| D1 | Сервер в РФ | GeoIP: ip-api.com + ipapi.co (fallback) | CRITICAL |
| D2 | HTTPS / валидный SSL | Проверка сертификата (expiry, issuer) | CRITICAL |
| D3 | HSTS-заголовок | HTTP-ответ: Strict-Transport-Security | HIGH |
| D4 | CSP / X-Frame-Options | HTTP-заголовки безопасности | MEDIUM |
### 3.5. Категория E: Внешние скрипты и трекеры (7 проверок)
| # | Проверка | Метод | Риск |
|---|----------|-------|------|
| E1 | Google Analytics (запрещён) | Regex HTML: google-analytics.com | CRITICAL |
| E2 | Meta Pixel (запрещён) | Regex HTML: facebook.com/tr, connect.facebook.net | CRITICAL |
| E3 | Google reCAPTCHA (запрещена) | Regex: google.com/recaptcha | HIGH |
| E4 | Google Fonts CDN (IP утечка) | Regex: fonts.googleapis.com | HIGH |
| E5 | Яндекс.Метрика (допустима) | Regex: mc.yandex.ru | INFO |
| E6 | VK Pixel (допустим) | Regex: vk.com/rtrg | INFO |
| E7 | Прочие зарубежные трекеры | Словарь: Hotjar, Mixpanel, Amplitude, Segment, Clarity, etc. | HIGH |
### 3.6. Категория F: Права субъекта (3 проверки)
| # | Проверка | Метод | Риск |
|---|----------|-------|------|
| F1 | Механизм отзыва согласия | LLM: поиск в политике «отозвать согласие», «отказаться» | HIGH |
| F2 | Порядок удаления данных | LLM: поиск «удалить», «уничтожить», email/форма для запроса | HIGH |
| F3 | Контакты DPO (Data Protection Officer) | Regex: email/телефон + контекст «ответственный за ПД» | MEDIUM |
### 3.7. Категория G: Смежные законы (4 проверки)
| # | Проверка | Метод | Риск |
|---|----------|-------|------|
| G1 | Англицизмы в CTA (ФЗ-53) | Словарь «красных» слов: sale, click here, buy now, etc. | MEDIUM |
| G2 | Возрастная маркировка (436-ФЗ) | Поиск меток 0+/6+/12+/16+/18+ | MEDIUM |
| G3 | Реквизиты юрлица (ИНН/ОГРН) | Regex + сверка с ЕГРЮЛ | MEDIUM |
| G4 | Маркировка рекламы erid (ОРД) | Поиск erid в HTML | LOW |
**Итого: 36 проверок в 7 категориях** — покрытие основных требований 152-ФЗ + смежных законов.
---
## 4. Архитектура эффективного сканера
### 4.1. Ключевой принцип: 4 фазы как у gdpr-cookie-scanner [3]
```
Фаза 1: LOAD — загрузка без взаимодействия
→ Сохранить ВСЕ cookies и network requests ДО consent
→ Это baseline: что сайт ставит без согласия
Фаза 2: DETECT — поиск consent-механизма
→ CMP-селекторы → DOM-эвристики
→ Извлечь кнопки с visual properties (размер, цвет)
→ Dark-pattern detection: асимметрия, скрытая кнопка отказа
Фаза 3: REJECT — отказ и capture
→ Нажать «Отказаться»
→ Сравнить cookies с baseline
→ Что осталось после отказа? → нарушение
Фаза 4: ACCEPT — чистый браузер, принять
→ Новый контекст (нет cookies)
→ Принять согласие
→ Дельта cookies = что consent реально меняет
```
Это **принципиально сильнее** текущего подхода (просто поиск элемента на странице).
### 4.2. Архитектура правил (Rule Engine)
По образцу LawCheck [4] — YAML-словари вместо хардкода:
```yaml
# dictionaries/trackers.yaml
foreign_critical:
- domain: google-analytics.com
law: "152-ФЗ ст. 18 ч. 5"
fine: "до 6 млн ₽"
action: "Удалить, заменить на Yandex Metrica"
- domain: facebook.com/tr
law: "152-ФЗ ст. 12"
fine: "до 6 млн ₽"
action: "Удалить, заменить на VK Pixel"
foreign_warning:
- domain: fonts.googleapis.com
law: "152-ФЗ (IP-утечка)"
fine: "до 300 тыс ₽"
action: "Скачать и раздавать self-hosted"
russian_allowed:
- domain: mc.yandex.ru
- domain: vk.com/rtrg
```
**Преимущества:**
- Обновление правил без перекомпиляции
- Не-разработчики могут добавлять трекеры
- Аудит изменений через Git
### 4.3. Модульная архитектура
```
152-fz-scanner/
├── main.py # CLI (scan, csv, server)
├── scanner/
│ ├── engine.py # Оркестратор: 4-фазный скан + asyncio.gather
│ ├── models.py # Pydantic: CheckResult, SiteScan, Score
│ ├── rules_engine.py # YAML-движок: загрузка словарей, выполнение правил
│ └── checks/
│ ├── base.py # Abstract BaseCheck
│ ├── consent/ # B-проверки (cookie + consent)
│ │ ├── banner.py
│ │ └── dark_patterns.py
│ ├── forms/ # C-проверки
│ │ ├── checkbox.py
│ │ └── fields.py
│ ├── infrastructure/ # D-проверки
│ │ ├── server.py
│ │ └── headers.py
│ ├── policy/ # A-проверки
│ │ ├── presence.py
│ │ └── llm_analysis.py
│ ├── trackers/ # E-проверки
│ │ └── scripts.py
│ └── rights/ # F-проверки
│ └── subject.py
├── dictionaries/ # YAML-словари (правила без кода)
│ ├── trackers.yaml
│ ├── cookie_patterns.yaml
│ ├── consent_texts.yaml
│ └── anglicisms.yaml # Для ФЗ-53
├── api/
│ ├── server.py # FastAPI
│ ├── routes.py
│ └── schemas.py
├── reports/
│ ├── generator.py # PDF + HTML + JSON
│ └── templates/
│ ├── report.html.j2 # Для сайта
│ └── batch_report.html.j2 # Сводка для агентства
├── workers/ # Очередь для batch
│ └── queue.py # RQ/ARQ воркеры
├── tests/
│ ├── test_checks/
│ └── fixtures/
└── data/
├── input/ # CSV с URL
└── output/ # JSON + PDF
```
### 4.4. Технологический стек
| Компонент | Технология | Почему |
|-----------|-----------|--------|
| **Браузерная автоматизация** | Playwright (Python) | Стандарт индустрии: ComplyTest, LawCheck, gdpr-cookie-scanner |
| **API** | FastAPI + Pydantic v2 | Быстрый, async, авто-документация |
| **Очередь (batch)** | ARQ (async) или RQ | LawCheck использует RQ; ARQ — более современный async |
| **PDF** | WeasyPrint + Jinja2 | Уже работает; альтернатива — Playwright PDF |
| **LLM-анализ** | Qwen35B / Gemma4 (локально) | Анализ политики: 16 разделов, права субъекта |
| **GeoIP** | ip-api.com + ipapi.co (fallback) | Бесплатные API |
| **Хранение** | SQLite (MVP) → PostgreSQL (prod) | LawCheck: SQLite в dev, PG в prod |
| **CI/CD** | GitHub Actions + SARIF | Формат от ComplyTest — стандарт для security tools |
---
## 5. Ключевые дифференциаторы
### 5.1. Что делает сервис уникальным
1. **4-фазный cookie-аудит** — никто в РФ не делает. Все проверяют только «наличие баннера»
2. **Dark-pattern detection** — асимметрия кнопок, скрытый отказ, предзаполненные чекбоксы
3. **LLM-анализ политики** — 16 разделов, а не просто «есть/нет»
4. **API-first** — REST API для интеграции (агентства, хостинги, CRM)
5. **Batch + white-label PDF** — пакетная проверка 100+ сайтов с брендированными отчётами
6. **CI/CD интеграция** — GitHub Actions, GitLab CI, выход с exit code 1 при CRITICAL
7. **Self-hosted** — можно развернуть на своём сервере (конфиденциальность данных клиента)
### 5.2. Модели монетизации
| Модель | Цена | ЦА |
|--------|------|-----|
| **Pay-per-scan** | 500-1500 ₽/сайт | Разовые проверки |
| **Подписка (мониторинг)** | 3000-15000 ₽/мес | Агентства, крупные сайты |
| **White-label** | 30 000-100 000 ₽/мес | Агентства (ресейл) |
| **On-premise лицензия** | 150 000-500 000 ₽/год | Корпорации, банки |
| **API (pay-per-request)** | 50-200 ₽/скан | Интеграции |
---
## 6. Дорожная карта
### Фаза 1: Исправить критические баги (сейчас)
- [x] Аудит проведён
- [ ] `engine.py` — `_calculate_score()` при ошибке загрузки
- [ ] `privacy_link.py` — убрать `page.goto()`, проверять через aiohttp
- [ ] `form_checkbox.py` — переписать детекцию label
- [ ] `server_location.py` — заменить urllib на aiohttp
### Фаза 2: Довести до production-quality (1-2 недели)
- [ ] 4-фазный cookie-аудит (замена текущего cookie_banner.py)
- [ ] YAML-словари для трекеров
- [ ] Dark-pattern detection
- [ ] LLM-анализ политики (16 разделов)
- [ ] API с rate limiting и авторизацией
- [ ] CI/CD mode (exit codes, SARIF)
### Фаза 3: B2B-фичи (2-4 недели)
- [ ] Batch-мониторинг (очередь + уведомления)
- [ ] White-label PDF
- [ ] Подписки и биллинг
- [ ] Личный кабинет
### Фаза 4: Экспансия (1-2 месяца)
- [ ] On-premise поставка (Docker)
- [ ] Интеграции: GitHub App, GitLab, Bitrix24
- [ ] API-ключи для партнёров
---
## 7. Почему это будет работать
1. **Рынок растёт** — РКН перешёл на проактивный мониторинг. Каждый сайт под угрозой
2. **Конкуренты слабые** — form-based, без API, без deep checks. Никто не делает 4-фазный cookie-аудит
3. **Штрафы пугающие** — до 500 млн ₽. Стоимость проверки 500-1500 ₽ — копейки по сравнению
4. **Техническое преимущество** — Playwright 4-фазный + LLM + YAML-правила = лучшая архитектура
5. **Модель с низким порогом входа** — pay-per-scan без подписки
---
## Источники
[1] Reova — «Персональные данные на сайте: чек-лист из 37 пунктов (2026)» — https://www.reova.ru/blog/personalnye-dannye-na-sajte.html
[2] ComplyTest — Open-source GDPR/WCAG/Security scanner (70 правил) — https://complytest.com/
[3] gdpr-cookie-scanner — Open-source CLI, 4-фазный cookie-аудит — https://gdpr.slashgear.dev/
[4] LawCheck — Open-source 152-ФЗ сканер (FastAPI+Playwright+RQ) — https://github.com/lawcheck/lawcheck
[5] Toolfox — 134 проверки по 11 законам — https://toolfox.ru/tools/proverka-sajta-fz-152
[6] Сканэтика — 38+ критериев, мониторинг — https://scanetika.ru/
[7] EdLegal — AI-анализ политики, расчёт штрафов — https://edlegal.ru/help/scanner-152fz-guide/
[8] Proverito — Чек-лист 152-ФЗ (16 пунктов) — https://proverito.ru/chek-list-152-fz
[9] EDPB Website Auditing Tool — EU official — https://www.edpb.europa.eu/our-work-tools/our-documents/support-pool-experts-projects/edpb-website-auditing-tool_en