TunyxTunyx
Назад к документам

Cookies и идентификация посетителя Tunyx

Реализовано

На сайте показывается уведомление с двумя равнозначными вариантами:

  • Только необходимые — разрешены только cookies, без которых нельзя безопасно войти и сохранить пользовательскую сессию;
  • Принять все — пользователь также разрешает необязательные cookies, если такие механизмы появятся в дальнейшем.

Выбор хранится 180 дней в first-party cookie tunyx_cookie_consent со значением necessary или all. Cookie имеет атрибуты Path=/, SameSite=Lax, а на HTTPS также Secure.

Cookie сессии yandex_tidal_session является необходимой. Она обеспечивает вход, OAuth-state и разделение данных аккаунтов. Секреты стримингов в cookies не хранятся.

Сервер также устанавливает необходимую cookie tunyx_visitor на 180 дней. Она содержит случайный идентификатор и HMAC-подпись, имеет HttpOnly, Path=/, SameSite=Lax и Secure в production. JavaScript сайта не может прочитать её. Сервер использует только HMAC-отпечаток идентификатора для продолжения гостевой сессии поддержки и корреляции злоупотреблений. Visitor-ID не открывает личную историю, не заменяет вход и не связывает разные браузеры или устройства.

Cookie tunyx_cookie_consent намеренно доступна интерфейсу: frontend должен знать, разрешены ли будущие необязательные механизмы. Она не содержит идентификатор пользователя.

На момент реализации необязательная аналитика, рекламные cookies и сторонние трекеры не подключены. Выбор all не должен сам по себе запускать сторонние сценарии: каждый будущий необязательный механизм обязан проверить сохранённое согласие.

Для чего cookies не подходят

Cookie нельзя считать надёжным доказательством личности. Пользователь может удалить её, сменить браузер или устройство. Поэтому cookie нельзя использовать как единственный способ:

  • блокировать повторное получение пробного периода;
  • определять одного и того же человека;
  • защищаться от ботов и DDoS;
  • принимать решения о блокировке аккаунта.

Tunyx может устойчиво узнать только тот же браузер, пока tunyx_visitor не удалена. Определить одного и того же человека после очистки cookies, в другом браузере или на другом устройстве без аккаунта достоверно невозможно. Fingerprinting устройства в текущей реализации не применяется.

План идентификации для пробного периода

Для ограничения повторного пробного периода нужно объединять несколько законных и минимально необходимых сигналов:

  1. подтверждённый аккаунт и нормализованный адрес почты;
  2. идентификатор платежного клиента и факт использованного пробного периода;
  3. журнал выдачи пробного периода на стороне сервера;
  4. ограниченный по сроку хэш сетевого сигнала как дополнительный риск-фактор, но не как самостоятельное основание отказа;
  5. ручную проверку спорных случаев и понятный способ обращения в поддержку.

Данные банковской карты Tunyx не хранит. Платёжный идентификатор и статус платежа должны приходить от ЮKassa.

Защита от ботов и DDoS

Cookies не останавливают DDoS. Нужны независимые серверные меры:

  • rate limiting в nginx/Caddy для входа, регистрации, восстановления пароля, OAuth и запуска переносов;
  • отдельные лимиты по IP, аккаунту и маршруту API;
  • очередь фоновых переносов с ограниченной конкуренцией;
  • временная блокировка после серии неверных входов;
  • структурированный журнал безопасности без паролей, токенов и полных персональных данных;
  • fail2ban для инфраструктурных атак;
  • CAPTCHA только при повышенном риске, а не для каждого пользователя;
  • лимиты размера запросов, таймауты и ограничение числа одновременных соединений;
  • резервный внешний анти-DDoS/CDN, если это допустимо с учётом локализации персональных данных и трансграничной передачи.

Перед включением аналитики, fingerprinting, CAPTCHA или внешнего CDN необходимо обновить политику обработки данных и проверить правовые основания передачи информации соответствующим поставщикам.