Глоссарий
Утечка через поток (worker realm)
Утечка через поток это расхождение отпечатка между страницей и фоновым потоком, который эта страница запустила.
Что такое фоновый поток
Поток это отдельная нить, которую страница заводит под работу, от которой окно иначе застыло бы. У него нет страницы, нет экрана и нет доступа к тому, что вы видите.
А navigator у него есть, и этот navigator отвечает за число ядер, платформу, языки и память машины.
Как сайт это снимает
Хватает трёх строк кода, а ответ приходит готовыми данными через сообщение, и разбирать странице ничего не нужно.
- 1
Собирает поток прямо в памяти
Код для него складывается из текста и запускается, ни разу не приезжая с какого-либо адреса.
- 2
Спрашивает те же имена
Сперва ядра и платформу: именно они сдвигаются, когда отпечаток переписывают.
- 3
Кладёт ответ рядом со страницей
Одна машина отвечает один раз. Два ответа описывают уже браузер, а не компьютер.
Ваша страница прямо сейчас
Эти четыре значения прочитаны в документе этой страницы, и наружу отсюда ничего не уходит.
Запущенному здесь потоку дали бы те же четыре имени, а его ответ сравнили бы с тем, что вы видите.
Ваша машина прямо сейчас
- Логических процессоров
- измеряем на вашей машине
- Платформа
- измеряем на вашей машине
- Языки
- измеряем на вашей машине
- Память устройства
- измеряем на вашей машине
Прочитано в вашем браузере и показано здесь. Никуда не отправляется.
Почему поток трудно закрыть
Код потока может лежать по собственному адресу, а переписать то, что браузер оттуда привезёт, код страницы не может.
Поэтому защита, написанная внутри страницы, закрывает видимые ей потоки и не закрывает остальные, а половина тут хуже, чем ничего.
Половина закрытого это доказательство
Сайт, получивший значения профиля из одного потока и значения машины из другого, держит в руках улику подмены, а не браузер для обмера.
Туда нечего подставлять
Приёмы, кладущие значения на страницу, не находят здесь страницы. У потока нет ни документа, ни своего окна.
Ответ мимо страницы
Значения возвращаются сообщением, копией данных, и по дороге их не видит ничто из того, что живёт на странице.
Откуда берутся значения
На нашем движке navigator страницы и navigator потока стоят на одном общем основании, и значения профиля отвечаются именно там.
Семя приходит строкой запуска до всякого кода, поэтому каждая нить браузера читает те же значения, и договариваться им не о чем.
Наследуется, а не переносится
Из страницы в поток ничему ехать не надо, поэтому нет и мгновения, когда одно уже изменено, а другое ещё нет.
Второй поток ничего не меняет
Десять нитей отвечают так же, как одна, потому что ни одна из них не отвечает за себя сама.
Самопроверка запускает настоящий
Внутри профиля самопроверка отпечатка поднимает поток и сверяет его ответ с документом.
Часто путают с этим
Утечка через кадр
Кадр это второй мир на той же странице. До него добираются иначе, и у него есть и экран, и документ.
Служебный поток
Тот переживает вкладку и занимается запросами и сохранёнными ответами. Это вопрос хранения, а не отпечатка.
Число ядер
Значение, которое у потока спрашивают чаще прочих, и у него есть своя страница.
Чего это не делает
- На встроенном движке это не закрыто. Тот мир нарочно оставлен отвечать за машину: закрыть часть способов запустить поток и не закрыть остальные значит отдать сайту улику вместо значений.
- Это не даёт потоку собственных значений. Один профиль это одна машина, и нить, расходящаяся со своей страницей, это ровно то, что ищут.
- Это не мешает сайту запускать потоки. Они обычная часть обычных страниц, а браузер без них выглядел бы куда страннее.
- Это ничего не решает за пределами отпечатка. Поведение и репутация адреса закрывают аккаунты чаще, чем все миры этой страницы вместе взятые.
Проверить
Каждое утверждение выше взято из файла, который можно открыть.
- Замер потока в самопроверке
- apps/desktop/src/lib/fpAudit.js
- Что отдала отгружаемая сборка в потоке и в документе
- engine/приёмка-отчёт.json
- Одно общее основание под обоими navigator
- engine/patches/armanos-fp.cumulative.diff
- Где записана граница встроенного движка
- apps/desktop/src/injected/fingerprint.js
Вопросы
- Может ли сайт запустить поток без меня?
- Да. Разрешения на это не спрашивают и на странице ничего не появляется, а большинство сайтов и так поднимают несколько потоков под обычную работу.
- Видит ли поток мои печенья?
- Не так, как страница. Здесь у него спрашивают про машину, а это другой вопрос, чем то, что хранится для сайта.
- Почему не ответить прямо на странице?
- Потому что поток это отдельный мир, который страницу не читает. Всё, что изменили там, в момент запуска нити просто отсутствует.
- Поможет ли отключить потоки совсем?
- Браузер станет реже любого значения внутри него. Страница, которая запустила поток и не получила ответа, узнаёт о браузере больше, чем узнала бы из самого ответа.
- Где посмотреть свой ответ?
- Самопроверка внутри профиля поднимает поток и сравнивает его со страницей. Это один из 29 замеров, которые там идут.
Посмотрите, что ответит поток в вашем профиле
Самопроверка отпечатка идёт внутри профиля и показывает все 29 замеров, и зелёные, и красные.