diff --git a/_blueprint/plan-draft.md b/_blueprint/plan-draft.md index cade3a6..760ae0a 100644 --- a/_blueprint/plan-draft.md +++ b/_blueprint/plan-draft.md @@ -332,9 +332,17 @@ HTMX: форма с `hx-post`, `hx-encoding="multipart/form-data"` → SVG вс #### 4.1. Принципы приватности, Zero-PII и учет голосов - **Полное отсутствие регистрации для посетителей:** Пользователи не создают аккаунты, не вводят email, пароли или личные данные. Единственный пользователь в `auth.User` — администратор сайта для входа в Django Admin. - **Исходные растровые изображения (JPG/PNG/WEBP):** Обрабатываются исключительно в оперативной памяти (через буфер `BytesIO`) и **не сохраняются на диск сервера вообще**. -- **Куки-согласие и идентификация устройства (Cookie-токен):** - - При согласии с правилами («Подчиниться Гипножабе!» в `allow-tracking.html`) клиенту выставляется долгоживущая анонимная кука устройства `hypn0_vid` со случайным UUID (`Max-Age=2 года`, `SameSite=Lax`, `HttpOnly`). - - **Голосование доступно только при наличии согласия на куки:** Если посетитель не принял соглашение (кука отсутствует), голосование заблокировано интерфейсом и отклоняется бэкендом (с требованием подчиниться Гипножабе). +- **Куки-согласие и идентификация устройства (Cookie `hypn0_vid`):** + - При согласии с правилами («Подчиниться Гипножабе!» в `allow-tracking.html`) в браузере генерируется случайный UUIDv4 (`vid`), который сохраняется в долгоживущую анонимную куку `hypn0_vid` (`Max-Age=2 года`, `SameSite=Lax`) и дублируется в `localStorage`. + - **Единый статус согласия и идентификации:** + - Наличие куки `hypn0_vid` одновременно означает: + 1. Посетитель дал согласие на условия / трекинг (`ALLOW_TRACKING = 'hypn0_vid' in request.COOKIES` в `context_processors.py`). + 2. У бэкенда есть анонимный `visitor_uuid` для формирования цифрового отпечатка `s_fingerprint` в `TbVote`. + - **Правила для пользователей без подчинения Гипножабе (без куки `hypn0_vid`):** + - Пользователь **может** загружать изображение, экспериментировать с настройками, генерировать и скачивать SVG-файл на свое устройство (чистая локальная работа). + - Пользователь **НЕ может** публиковать картину в галерею или голосовать за чужие работы: + - Публикация картины на сервер требует немедленного создания авторской записи `TbVote(i_direction=Direction.AUTHOR)` для закрепления авторства, защиты от самолайка и стартового рейтинга. + - Без согласия и UUID сформировать `s_fingerprint` невозможно $\rightarrow$ кнопка «Опубликовать в галерею» и лайки заблокированы в интерфейсе (с всплывающим требованием подчиниться Гипножабе) и отклоняются бэкендом (HTTP 403). - **Учет голосов, защита от накрутки и определение авторства (`TbVote`):** - **Бэкенд:** Голоса учитываются анонимно через модель `TbVote` со связкой `(k_item, s_fingerprint)`. Поле `s_fingerprint` формируется как необратимый хэш: `sha256(visitor_uuid + SECRET_KEY)`. Это надежно разделяет разные компьютеры в одной корпоративной сети/NAT и не содержит открытых ПДн (Zero-PII). - **Направление голоса (`i_direction` / `Direction`):** diff --git a/hypn0/hypn0_site/context_processors.py b/hypn0/hypn0_site/context_processors.py index bb26a24..1f778e5 100644 --- a/hypn0/hypn0_site/context_processors.py +++ b/hypn0/hypn0_site/context_processors.py @@ -1,10 +1,12 @@ from django.conf import settings from django.http import HttpRequest -# Имя куки, которая ставится клиенту, когда он СОГЛАСИЛСЯ на отслеживание -# (Google Tag Manager, Яндекс.Метрика и т.п.). Если кука присутствует — -# предупреждение о трекинге больше не показываем. -ALLOW_TRACKING_COOKIE_NAME = "allow_tracking" +# Имя куки с UUID устройства посетителя. Устанавливается при согласии +# с условиями ("Подчиниться Гипножабе!"). +# Одновременно служит: +# 1) Флагом согласия на отслеживание (ALLOW_TRACKING). +# 2) Анонимным идентификатором устройства для учета голосов (TbVote) без сбора ПДн. +ALLOW_TRACKING_COOKIE_NAME = "hypn0_vid" def site_context(request: HttpRequest) -> dict: diff --git a/hypn0/templates/block/allow-tracking.html b/hypn0/templates/block/allow-tracking.html index c49fc29..73eed66 100644 --- a/hypn0/templates/block/allow-tracking.html +++ b/hypn0/templates/block/allow-tracking.html @@ -1,4 +1,4 @@ -{# НИЖНИЙ POPUP О КУКУХ И ОТСЛЕЖИВАНИИ #}
Внимание! В соответствии с 152-ФЗ @@ -8,6 +8,6 @@ впадаете в транс и принимаете условия нашей политики коконфиденциальности. Не пытайтесь переключить вкладку!
- +