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