8.2 KiB
Политика безопасности и конфиденциальности (SECURITY)
Данный документ описывает принципы защиты данных, архитектуру приватности по умолчанию (Privacy by Default), механизмы предотвращения накруток и порядок сообщения об уязвимостях в проекте Hypn0 (HypnoSVG).
1. Архитектура приватности: Zero-PII
Платформа Hypn0 спроектирована по принципу нулевого сбора персональных данных (Zero Personally Identifiable Information):
- Мы не требуем регистрации, ввода логинов, паролей, адресов электронной почты или номеров телефонов.
- В базе данных проекта отсутствуют таблицы пользователей или учетных записей.
- Сгенерированные SVG-файлы содержат только математические координаты геометрических примитивов и инлайновые CSS-анимации. В них не встраиваются метаданные исходных изображений (EXIF-теги, геолокация и сведения об устройствах вырезаются при растеризации).
2. Режим без согласия (Default / No-Tracking)
Если посетитель не выразил явного согласия на отслеживание (не нажал кнопку подтверждения в модальном окне):
- Никаких клиентских идентификаторов: В браузере пользователя не создаются cookie-файлы и записи
localStorage. - Отключение внешних систем аналитики: Внешние трекеры и счетчики метрик (Яндекс.Метрика, Google Tag Manager и др.) блокируются на уровне шаблонизатора (
{% if ALLOW_TRACKING %}) и физически не загружаются на клиентское устройство. - Серверные логи: Единственная информация, которая фиксируется инфраструктурой — стандартные системные журналы веб-сервера (Nginx / Gunicorn), включающие IP-адрес, User-Agent и запрашиваемый URL. Логи используются исключительно для защиты от DDoS-атак, мониторинга доступности и хранятся ограниченное время с регулярной ротацией.
3. Ограничения для пользователей без согласия
Пользователи, отказавшиеся от отслеживания или не давшие явного согласия, могут свободно использовать локальный генератор и просматривать галерею. Однако им недоступны социальные функции платформы:
- Голосование за работы (лайки / дизлайки);
- Отправка жалоб (клеймы на спам или неприемлемый контент);
- Публикация собственных работ в общую Галерею Сообщества.
Причина ограничений: защита от накруток и бот-атак
Для работы гравитационного алгоритма рейтинга и справедливого распределения работ по уровням («Инкубатор», «Выбор Мозгового Слизня», «Золотой фонд») платформе необходим уникальный анонимный якорь клиента.
Если клиент не дал согласие на запись анонимного идентификатора устройства, сервер не имеет возможности отличить повторный клик от первичного. Допуск анонимных неидентифицированных запросов к голосованию привел бы к мгновенной накрутке рейтинга скриптами, спаму и искажению всей экосистемы галереи.
4. Механизм согласия и идентификации (hypn0_vid)
При нажатии кнопки «Подчиниться Гипножабе!» (получение согласия):
- В браузере генерируется случайный криптографический идентификатор версии 4:
crypto.randomUUID(). - Значение сохраняется в cookie и
localStorageпод ключомhypn0_vid. - Срок жизни cookie составляет 2 года, флаги передачи настроены на безопасный режим (
path=/; SameSite=Lax). - Значение
hypn0_vidявляется псевдослучайной последовательностью символов и не может быть сопоставлено с реальной личностью пользователя. - Идентификатор используется бэкендом исключительно в модели
TbVoteдля ограничения частоты действий (Rate Limiting) и гарантии принципа «один голос на одну картину от одного браузера».
5. Безопасность обработки файлов и генерации SVG
- Санитизация входных данных: Все загружаемые изображения проходят валидацию через библиотеку Pillow. Бинарный код файлов декодируется в память, отсекая потенциально вредоносные вложения и эксплойты форматов.
- Безопасность SVG: Выходной SVG формируется программно из числовых матриц и не содержит тегов
<script>, внешних ссылокxlink:hrefили обработчиков событийonload/onclick. Это исключает угрозу Stored XSS при просмотре чужих работ. - Ограничения ресурсов (DoS Prevention): Заданы строгие ограничения на максимальный размер входного файла, разрешение сетки (
cols) и радиус элементов, предотвращающие исчерпание памяти сервера (Memory Exhaustion).
6. Сообщение об уязвимостях (Vulnerability Disclosure)
Если вы обнаружили уязвимость безопасности в сервисе Hypn0, просим вас ответственно подойти к раскрытию информации:
- Канал связи: Направьте подробное описание проблемы мейнтейнеру проекта через issue-трекер репозитория с пометкой безопасности или по электронной почте администратора.
- Что указать: Описание вектора атаки, шаги для воспроизведения (PoC) и потенциальное влияние на систему.
- Сроки: Мы стремимся подтвердить получение отчета в течение 48 часов и оперативно выпустить патч. Просим воздержаться от публичного раскрытия до момента устранения уязвимости.