Безопасность и разрешения
Игроки ставят оверлеи незнакомых авторов из Мастерской. Поэтому Racelink ограничивает каждый оверлей, а всё лишнее оверлей получает только с согласия игрока.
Ограничения для каждого оверлея
Оверлей из Мастерской — это веб-страница, которую написал не Racelink. Поэтому ей можно только то, что нужно, чтобы нарисовать себя.
- Отдельный адрес
- Каждый оверлей открывается на своём адресе, отдельно от Racelink и от других оверлеев. Их данные и страницы ему недоступны.
- Только свои файлы
- Скрипты, стили, шрифты и картинки загружаются только из пакета оверлея. Чужие скрипты не запускаются, даже если доступ в интернет разрешён.
- Без фреймов, форм и плагинов
- Оверлей не может встроить другой сайт, отправить форму или подключить плагин.
- Только Racelink
- Оверлей может подключаться только к Overlay API на этом компьютере. Интернет закрыт, пока игрок не разрешит адреса, которые оверлей указал.
Overlay API отвечает только оверлеям и страницам с вашего компьютера во время разработки. Обычный сайт, открытый в браузере игрока, прочитать его телеметрию не может.
Что оверлей получает без разрешения
Телеметрию игры, свои настройки, демо-данные, а также карты трасс, логотипы машин и флаги из Racelink (Карты трасс, логотипы и флаги). Почти любому оверлею этого хватает.
Что нужно разрешение игрока
Всё более личное или выходящее за пределы Racelink оверлей получает только с разрешения. Оверлей перечисляет нужные разрешения в манифесте. Когда игрок добавляет оверлей, он видит окно с отдельной галочкой для каждого разрешения. Потом выбор можно изменить в разрешениях оверлея.
media- Музыка, которая играет на компьютере: название трека, исполнитель и обложка (поле
system.media). Без разрешения в полеnull. steamMessages- Личные сообщения, которые друзья пишут игроку в Steam (
steam.chat). Без разрешения вsteam.chat.accessзначение"denied", и сообщения не приходят. internet- Запросы по HTTPS и WSS к перечисленным адресам, до 20 штук, например
api.example.comили*.example.com. Подробнее — Данные из интернета.
"permissions": { "media": true, "internet": ["api.example.com"] }- Разрешение даёт ровно то, что в нём названо. Если в Racelink появятся новые личные данные, для них будет новое разрешение: то, что игрок уже разрешил, само не расширится.
- Если новая версия оверлея просит больше разрешений, игрока спросят снова. Пока он не согласится, новое разрешение закрыто.
- Демо-данные доступны всегда, чтобы превью выглядели полностью.
- Встроенным оверлеям Racelink разрешено всё.
Как узнать, что разрешено
Игрок может разрешить всё, часть или ничего. Объект overlay.permissions говорит, что разрешено сейчас, а событие permissions приходит, когда игрок меняет выбор. Оверлей должен показывать что-то полезное в любом случае.
const showMusic = (allowed: boolean): void => {
music.hidden = !allowed;
};
showMusic(overlay.permissions.media);
overlay.on('permissions', (permissions) => showMusic(permissions.media));const [permissions, setPermissions] = useState(overlay.permissions);
useEffect(() => overlay.on('permissions', setPermissions), [overlay]);
return permissions.media ? <NowPlaying media={telemetry.system.media} /> : null;Токен экземпляра
Racelink открывает каждый экземпляр оверлея со специальным ключом — токеном — в адресе страницы. SDK передаёт его Racelink и в ответ получает настройки и разрешения этого экземпляра. Если страницу открыть без действующего токена, например вручную из файлов пакета, она получит телеметрию и демо-данные, но не настройки и не разрешения. Работать с токеном самому не нужно: SDK делает это за вас.
Как сделать оверлей, которому доверяют
- Просите только нужные разрешения: лишнее разрешение настораживает игроков.
- В описании в Мастерской объясните, зачем оверлею каждое разрешение.
- Не кладите в пакет секреты. Любой может скачать оверлей из Мастерской и прочитать его код, включая ключи API. Используйте сервисы, которые рассчитаны на запросы прямо из браузера.
- Телеметрия и настройки остаются на компьютере игрока. Если оверлей что-то отправляет на сервер, напишите в описании, что именно и зачем.