[ rusttv.org · сайт и расширение chrome ]
Политика конфиденциальности
RustTV.org — каталог серверов игры Rust: расписание вайпов, онлайн и пинг. Проект состоит из сайта rusttv.org и расширения для Chrome. Аккаунт у нас появляется, только если вы входите на сайт через Steam, — что мы о нём храним, описано в разделе 6. Мы не показываем рекламные трекеры и не продаём пользовательские данные.
Коротко
- Избранное и настройки хранятся в браузере — в chrome.storage вашего профиля. На наши серверы они не отправляются.
- Замер пинга включается вами и работает с вашего устройства напрямую к игровым серверам; результаты остаются локально.
- API видит ваш IP-адрес — как любой сайт, к которому обращается браузер. Он используется по ходу запроса и попадает только в обычные журналы веб-сервера.
- Push-уведомления сайта включаются вами — тогда мы храним адрес подписки вашего браузера; содержимое уведомлений зашифровано, и push-сервис браузера его не читает (раздел 5).
- Вход через Steam необязателен — если вы входите, мы храним ник, аватар и SteamID64 вашего аккаунта и немного сведений о том, как вы пользуетесь разделом «Играть вместе»; чаты лобби для модерации видят администраторы (раздел 6).
- Собственная статистика обезличена — это только числа за день: сколько раз открывали трансляции из раздела Live и сколько раз создавали лобби, просились в них и запускали автоподбор. IP-адресов, cookie и аккаунтов в этих числах нет; чтобы не засчитать один переход дважды, сервер лишь полчаса держит в оперативной памяти метку, вычисленную из IP-адреса (раздел 7).
- На сайте работает Google Analytics — веб-статистика Google со своими cookie (раздел 7). Другой сторонней аналитики и счётчиков посещаемости нет, а в расширении нет никакой.
- Нет рекламы и продажи данных; расширение не загружает удалённый код.
1. Что делает расширение
Расширение показывает в панели браузера список Rust-серверов с данными нашего публичного API: название, онлайн, карта, провайдер, время прошлого и следующего вайпа. Пинг расширение при вашем согласии измеряет само — об этом раздел 3. Сервер можно добавить в избранное и получать уведомление незадолго до вайпа (и, по желанию, сразу после него). Иконка расширения показывает обратный отсчёт до ближайшего вайпа из избранного.
Расширение не встраивает скрипты в веб-страницы, не читает историю, вкладки, буфер обмена и содержимое страниц. Оно работает только со своим попапом, страницей настроек и нашим API.
2. Какие данные хранит расширение
Все данные расширения лежат в хранилище браузера (chrome.storage) внутри вашего профиля. Это единственное место, где они существуют: копии на наших серверах нет.
chrome.storage.sync
- Избранные серверы — список идентификаторов серверов из нашего каталога (до 50).
- Настройки — за сколько минут предупреждать о вайпе, нужно ли уведомление после вайпа, регион по умолчанию.
Хранилище sync синхронизируется между вашими устройствами средствами самого Chrome, если вы вошли в аккаунт Google и включили синхронизацию. Эта передача происходит между вами и Google; мы к ней доступа не имеем и её содержимое не получаем. Отключить синхронизацию можно в настройках Chrome.
chrome.storage.local
- Кэш данных — последний загруженный срез избранных серверов и ближайших вайпов, чтобы попап открывался мгновенно и работал при недоступном API.
- Служебное состояние уведомлений — о каком вайпе уже сообщили, чтобы не показывать одно и то же дважды.
- Кэш пинга — измеренные значения, оценки по расстоянию и базовая задержка до API, живут 5 минут и ограничены по объёму.
- Ваши примерные координаты — ответ /api/v1/geo (уровень города/региона), чтобы не запрашивать его при каждом открытии попапа. Живёт несколько часов и используется только для оценки пинга по расстоянию.
- Флаг «разрешение уже спрашивали» — чтобы не показывать запрос повторно.
Ничего из перечисленного не покидает браузер. Удаление расширения удаляет и его хранилища.
3. Замер пинга (по вашему согласию)
Manifest V3 не даёт расширениям сырых сокетов, а Rust-серверы отвечают по UDP, поэтому «настоящий» игровой пинг из браузера измерить нельзя. Расширение делает это косвенно: открывает обычное сетевое соединение к IP:порт игрового сервера и засекает время до ответа (обычно — до отказа в соединении). Это время и есть оценка RTT.
- Функция выключена по умолчанию. Она требует необязательного разрешения на хосты, которое запрашивается через стандартный диалог Chrome (chrome.permissions.request).
- Соединения идут с вашего устройства напрямую к IP-адресам игровых серверов. Эти адреса, как и любые сетевые соединения вашего компьютера, видны вашему интернет-провайдеру и владельцу сервера.
- Никакие данные при этом не передаются: запрос уходит в режиме no-cors без cookie и учётных данных, ответ не читается — измеряется только время.
- Результаты остаются в браузере (кэш на 5 минут) и нам не отправляются.
- Разрешение можно отозвать в любой момент на странице настроек расширения — кнопка «Отозвать доступ» — или средствами Chrome.
Без этого разрешения расширение не открывает соединений к игровым серверам вовсе: оно измеряет только собственную задержку до нашего API и показывает её в подвале списка, а в колонке пинга — оценку по расстоянию, помеченную знаком «≈». Так же считает пинг и сайт rusttv.org: расчёт целиком идёт в вашем браузере (см. раздел 4).
4. Обращения к API rusttv.org
И сайт, и расширение читают данные из публичного API https://rusttv.org/api/v1. API работает только на чтение (GET), анонимно, без авторизации и без cookie.
Как и при любом HTTPS-запросе, наш сервер видит IP-адрес, с которого пришёл запрос, и стандартные заголовки браузера (User-Agent, язык). Мы используем это так:
- Ограничение частоты запросов — счётчик запросов на IP (60 запросов в минуту; 300 для точки замера задержки), чтобы API не положили автоматикой. Счётчик живёт в оперативной памяти и обнуляется сам.
- Гео-оценка пинга — сайт и расширение запрашивают точку /api/v1/geo, которая определяет по вашему IP приблизительные координаты (уровень города/региона) по локальной офлайн-базе DB-IP и сразу возвращает их вам с заголовком Cache-Control: no-store. Ответ никуда не записывается; расстояние до сервера и сама оценка пинга считаются уже у вас в браузере. Запросов к сторонним геосервисам при этом не делается.
- Автоподбор тиммейтов — когда вы, войдя через Steam, нажимаете «Автоподбор» в разделе «Играть вместе» и автоподбор ставит вас в очередь (так бывает, когда тиммейтов одновременно ищет много людей), сервер тем же способом, по локальной базе DB-IP, определяет по IP ваши примерные координаты, огрубляет их до целого градуса (около 100 км) и хранит в билете очереди, чтобы собирать лобби в первую очередь из игроков поблизости. Пока ищущих мало, автоподбор сразу добавляет вас в лобби и местоположение не определяет. Сам IP-адрес не записывается, координаты никому не показываются и стираются, как только поиск закончился: вас посадили в лобби или вы его отменили, а если поиск просто истёк — в течение суток.
- Журналы веб-сервера — обычный access-log nginx (IP, время, путь, код ответа, User-Agent). Он нужен для диагностики и защиты от злоупотреблений, ротируется штатными средствами сервера и не используется для профилирования и не связывается с личностью.
Никаких профилей, идентификаторов пользователя, cookie и трекинга между сайтами. Ваши избранные серверы и настройки в API не передаются: запросы каталога одинаковы для всех.
5. Уведомления
chrome.notifications
Уведомления о вайпах формируются на вашем устройстве через chrome.notifications: расширение по будильнику (chrome.alarms) обновляет данные избранных серверов и сравнивает время следующего вайпа с вашей настройкой. Push-сервисы не используются, сторонним сервисам ничего не отправляется.
Web Push
Отдельно от расширения сайт rusttv.org может присылать уведомления в браузер о событиях раздела «Играть вместе» — к вам в лобби просятся, вас приняли в лобби, автоподбор собрал вам лобби или добавил в ваше лобби нового игрока — и о бане игрока, на которого вы пожаловались. О других событиях, включая сообщения в чате лобби, такие уведомления не приходят. По умолчанию функция выключена: она работает, только если вы вошли на сайт через Steam, сами включили уведомления и разрешили их в запросе браузера. Подписка действует в одном браузере: на телефоне и на компьютере уведомления включаются отдельно.
- Что мы храним. Когда вы включаете уведомления, браузер выдаёт адрес подписки в своём push-сервисе и два ключа шифрования к нему. Мы храним их вместе с аккаунтом, под которым вы вошли через Steam, языком сайта, на котором пишется текст уведомлений, и временем, когда подписку включили и когда браузер последний раз её подтвердил. Больше ничего о браузере в подписке нет.
- Зачем. Только чтобы доставить уведомление в этот браузер, когда вкладка RustTV закрыта. Ни для чего другого подписка не используется.
- Как доставляется. Уведомление уходит через push-сервис разработчика вашего браузера (Google, Mozilla, Apple, Microsoft и других): иначе браузеры уведомлений от сайтов не принимают. Содержимое шифруется на нашем сервере ключами вашего браузера (стандарт Web Push, RFC 8291) и расшифровывается только в самом браузере, поэтому push-сервис передаёт запечатанное сообщение, которое не может прочитать.
- Что внутри уведомления. Фраза о событии, а кроме неё: в уведомлениях раздела «Играть вместе» — ник и аватар Steam участника события (кто просится к вам, кто вас принял, лидер собранного лобби или игрок, которого автоподбор добавил в ваше лобби), название сервера лобби (или адрес, который указал его создатель) и ссылка на раздел «Играть вместе»; в уведомлении о бане — ник и аватар Steam игрока, на которого вы пожаловались, название сервера, если вы указали его в жалобе, и ссылка на ваши жалобы. Ссылок на профили Steam в уведомлениях нет. SteamID нет тоже, кроме одного случая: если, когда вы отправляли жалобу, Steam не сообщил ник игрока, вместо ника будет его SteamID64 из вашей жалобы.
- Когда подписка удаляется. Когда вы выключаете уведомления на сайте; когда выходите из аккаунта в этом браузере; когда push-сервис сообщает, что подписки больше нет (например, вы отозвали разрешение или очистили данные сайта); когда аккаунт блокируют; и через 90 дней, если за это время вы ни разу не заходили на RustTV из этого браузера, войдя в аккаунт.
- Разрешение можно отозвать в любой момент в настройках сайта в самом браузере. Уведомления сразу перестанут приходить, а сохранённая подписка удалится при следующей попытке доставки.
6. Аккаунт Steam на сайте
Вход на сайт rusttv.org через Steam необязателен — он нужен для части функций, например для раздела «Играть вместе» и push-уведомлений. Входите вы на сайте самого Steam: он сообщает нам только ваш SteamID64, а пароль от Steam мы не видим. Если вы вошли, мы храним:
- Профиль Steam — ник, аватар и SteamID64, а если в Steam открыты игровые данные — сколько часов вы наиграли в Rust. Всё это мы получаем от Steam и время от времени обновляем.
- Вход и визиты — когда вы впервые вошли, когда входили в последний раз и когда последний раз открывали сайт, будучи в аккаунте. Пока вы в аккаунте, браузер хранит cookie сессии, а сервер — запись о ней с IP-адресом и браузером (User-Agent); записи неактивных сессий удаляются автоматически.
- «Играть вместе» — роли, которые вы себе выбрали; сколько лайков и дизлайков вам поставили тиммейты; сколько раз вы выходили из лобби, собранных автоподбором (после этого автоподбор на время закрывается); и суммарные счётчики: сколько лобби вы создали, в скольких участвовали, сколько раз запускали автоподбор и просились в чужие лобби, сколько сообщений написали. Сами лобби вместе с составами, заявками, оценками и чатами удаляются примерно через три дня после того, как лобби закрылось или истекло; записи очереди автоподбора — через три дня после конца поиска; уведомления на сайте — через 30 дней.
- Серверы — если вы подтверждаете права на свой сервер Rust: ваши заявки, переписку с модератором и пароль RCON, который хранится зашифрованным и никому не показывается.
- Жалобы на читеров — если вы жалуетесь на игрока: его SteamID64 и ссылку на профиль Steam, его ник и аватар — такими, какими их показывал Steam в момент жалобы, — сервер, если вы его указали, текст причины, если вы его написали (до 1000 знаков), время отправки, статус жалобы (отправлена или игрок забанен) и дату бана, если она есть. На одного игрока с одного аккаунта можно пожаловаться только один раз. Жалобы хранятся, пока существует ваш аккаунт, и удаляются вместе с ним; сами по сроку они не удаляются.
- Блокировка — если аккаунт заблокирован: причину, срок и то, кто из администраторов и когда поставил или снял блокировку.
Ник, аватар, часы в Rust, роли и лайки видят другие игроки в разделе «Играть вместе». Ссылку на ваш профиль Steam — только те, кто с вами в одном лобби, и создатель лобби, в которое вы попросились.
Свои жалобы вы видите в истории жалоб на сайте. Администраторы RustTV видят все жалобы целиком, в том числе кто их отправил. Если вы указали в жалобе сервер, её видит и владелец этого сервера, подтвердивший его на RustTV, — даже если он сделает это уже после вашей жалобы. Ему видны ник, аватар и ссылка на профиль Steam игрока, текст причины, сервер, время и статус жалобы, а также сколько всего жалоб на этого игрока отправлено на RustTV, — но не то, кто её отправил.
Об игроке, на которого пожаловались, мы храним только написанное в жалобе и общедоступные данные его профиля Steam, перечисленные выше. Ему самому жалоба не показывается — разве что он и есть владелец указанного в ней сервера. В самой игре RustTV никого не банит.
Сведения аккаунта и чаты лобби — чаты, пока лобби не удалено, — видят администраторы RustTV для модерации. За нарушения они могут заблокировать аккаунт на время или бессрочно. Заблокированный аккаунт не может войти на сайт: его место в лобби, заявки и поиск в автоподборе снимаются, подписки на push-уведомления удаляются, а при попытке входа сайт показывает причину и срок блокировки.
7. Статистика
Счётчики RustTV
Чтобы понимать, чем на сайте пользуются, мы ведём собственные счётчики — обезличенные числа за день:
- Переходы на трансляции — сколько раз открывали эфир каждого канала из раздела Live и из виджета «Сейчас в эфире» на главной.
- «Играть вместе» — сколько создано лобби и сколько собрал автоподбор, сколько было заявок и чем они кончились, сколько раз запускали автоподбор и сколько в нём ждали, сколько написано сообщений.
В этих счётчиках нет IP-адресов, cookie и аккаунтов: каждая запись — это день, действие, уточнение вроде канала или языка лобби и число. Чтобы повторные клики по одной трансляции не накручивали счётчик, сервер полчаса держит в оперативной памяти отметку, что с этого IP-адреса её уже открывали, — так же устроено ограничение частоты запросов (раздел 4); сам IP-адрес в счётчики не попадает. Суммарные счётчики вашего аккаунта описаны в разделе 6.
Google Analytics
На страницах сайта rusttv.org работает Google Analytics — сервис веб-статистики компании Google: с его помощью мы смотрим, сколько людей заходит на сайт, откуда они приходят и какие страницы открывают. Скрипт Google Analytics загружается с серверов Google, ставит в браузере собственные cookie (_ga, _ga_*) и отправляет в Google сведения о посещении: какие страницы вы открываете и что на них делаете (например, прокручиваете страницу или переходите по ссылкам), откуда пришли, тип устройства, браузер, язык и размер экрана; примерное местоположение Google определяет по IP-адресу. Эти сведения Google обрабатывает по своей политике конфиденциальности (policies.google.com/privacy). Отключить Google Analytics можно блокировщиком контента или официальным дополнением Google Analytics Opt-out. В расширении RustTV для Chrome Google Analytics нет.
8. Разрешения расширения и зачем они нужны
- storage
- Хранить избранное и настройки в браузере, а также кэш каталога и пинга.
- alarms
- Периодически обновлять данные избранного и срабатывать точно ко времени вайпа: service worker в MV3 выгружается, таймеры в нём не переживают выгрузку.
- notifications
- Показывать уведомление о скором вайпе избранного сервера и, по желанию, о том, что вайп прошёл.
- offscreen
- Выполнять серию замеров времени отклика в скрытом документе: service worker завершается раньше, чем измерение успевает закончиться.
- https://rusttv.org/*
- Читать каталог серверов и расписание вайпов из нашего API. Единственный внешний адрес, к которому расширение обращается само по себе.
- *://*/* (необязательное)
- Только для прямого замера пинга: адреса игровых серверов заранее неизвестны и меняются, поэтому конкретный список хостов в манифест вписать нельзя. Запрашивается по вашему явному согласию, используется исключительно для соединения к IP:порт сервера из каталога, никаких скриптов на страницы не внедряет и содержимое сайтов не читает. Отзывается в настройках.
9. Чего мы не делаем
- Не собираем настоящее имя, e-mail, телефон, почтовый адрес и платёжные данные.
- Не подключаем рекламные сети и рекламные трекеры, а из сторонней аналитики и счётчиков посещаемости — ничего, кроме Google Analytics на сайте (раздел 7).
- Не продаём пользовательские данные, не передаём их третьим лицам, кроме описанного в разделах 5, 6 и 7, и не используем их для целей, не связанных с работой сайта и расширения.
- Расширение не загружает и не исполняет удалённый код: весь его код входит в опубликованный пакет.
- Не используем данные для оценки кредитоспособности и не передаём их брокерам данных.
10. Как удалить свои данные
Удалите расширение в chrome://extensions — вместе с ним удаляются оба его хранилища. Избранное можно очистить и вручную, убрав серверы звёздочкой, а разрешение на замер пинга — отозвать на странице настроек расширения. Данных расширения на нашей стороне не остаётся, потому что мы их не сохраняем.
Если вы включали push-уведомления сайта, подписку вашего браузера удаляет их выключение на сайте или выход из аккаунта в этом браузере; остальные случаи перечислены в разделе 5.
Сведения аккаунта Steam (раздел 6), включая ваши жалобы на читеров, хранятся, пока существует аккаунт; лобби, чаты и уведомления удаляются сами — в сроки, указанные в том же разделе.
11. Дети
Сервис не адресован детям младше 13 лет и сознательно не собирает данные детей.
12. Изменения политики
Если политика изменится, мы обновим дату вступления в силу вверху страницы. Существенные изменения будут отражены в описании расширения в Chrome Web Store.