Исправлено: - 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)
347 lines
20 KiB
Markdown
347 lines
20 KiB
Markdown
# 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
|