Отпечаток браузера: что на самом деле читают сайты

Обзор по полям значений, которые собирает сайт, — от canvas и WebGL до аудио, шрифтов, экрана и часового пояса — и почему согласованная идентичность лучше случайной.
Снятие отпечатка браузера — это распознавание браузера по сообщаемым им значениям, а не по чему-либо сохранённому. Cookie не нужны. Браузер просто отвечает на вопросы, которые вправе задать любая веб-страница, и вместе эти ответы достаточно своеобразны, чтобы узнать его снова.
Какие значения собираются
Большинство скриптов для снятия отпечатков читают одни и те же несколько источников.
Очевидные
- User agent содержит название браузера, версию и платформу и отправляется с каждым запросом.
- Экран сообщает ширину, высоту, глубину цвета, плотность пикселей и доступную рабочую область.
- Язык и часовой пояс — это сообщаемая браузером локаль и вычисляемое им смещение.
- Подсказки об оборудовании дают заявленное число процессоров и, в некоторых браузерах, приблизительный объём памяти.
Связанные с отрисовкой
Именно эти значения люди имеют в виду, говоря об отпечатках, потому что они косвенные. Страница просит браузер что-то нарисовать, а затем считывает, что именно получилось.
- Canvas: текст и фигуры отрисовываются на невидимом холсте и хешируются. Результат зависит от графического стека, шрифтов и сглаживания.
- WebGL раскрывает строки производителя и рендерера графического адаптера, а также хеш отрисованной сцены.
- Аудио пропускает осциллятор через граф обработки звука и хеширует результат. Поведение чисел с плавающей запятой слегка различается в разных стеках.
- Определение шрифтов измеряет текст в шрифтах-кандидатах и по тому, какие измерения различаются, делает вывод об установленных.
Сетевые
- Адрес, с которого пришёл запрос, и то, что о нём говорит геолокационная база.
- WebRTC, который может раскрыть адреса, которые соединение иначе не показало бы.
- Порядок и содержимое полей рукопожатий TLS и HTTP, различающиеся у разных клиентов.
Почему рандомизировать все поля — неверный инстинкт
Интуитивная защита — менять всё при каждом визите. Она оборачивается против вас по двум причинам.
Первая — противоречия. Случайные поля ничего не знают друг о друге. User agent, заявляющий Windows, рядом со строкой рендерера WebGL, существующей только на оборудовании Apple, — более сильный сигнал, чем любое из значений само по себе. Реальные машины внутренне согласованы; только синтетические противоречат сами себе.
Вторая — нестабильность. Аккаунт, сообщающий при каждом визите другое устройство, описывает то, чего нет ни у одного реального человека. Постоянство во времени — вот как выглядит обычный пользователь.
Что охватывает идентичность профиля
| Источник | Как обрабатывается |
|---|---|
| User agent и платформа | Генерируются вместе, поэтому заявленная платформа соответствует окружающим значениям |
| Экран и плотность пикселей | Фиксируются для профиля, берутся из размеров, которые реально сообщают дисплеи |
| Часовой пояс и локаль | Задаются для профиля и согласуются с сетевым маршрутом, который он использует |
| Canvas, WebGL и аудио | Получают стабильную обработку на уровне профиля, одинаковую при каждом открытии |
| Шрифты | Набор для профиля, согласованный с платформой, которую он заявляет |
| WebRTC | Ограничен так, чтобы не противоречить сетевому маршруту профиля |
Проверка собственной работы
Откройте профиль и зайдите на тестовую страницу отпечатков. Несколько таких страниц бесплатно публикуют читаемые ими значения. Стоит проверить две вещи, и они не те, что можно ожидать:
- Согласуются ли значения друг с другом? Платформа, шрифты, графические строки и часовой пояс должны описывать одну правдоподобную машину.
- Совпадают ли они с прошлым разом? Закройте профиль, откройте снова и перезагрузите тест. Профиль, чьи значения меняются между открытиями, нестабилен, а стабильность — это то свойство, которое имеет значение.
Оценка редкости на тестовой странице — наименее полезное число. Она сравнивает вас с посетителями этой страницы, а это в подавляющем большинстве люди, тестирующие антидетект-браузеры.


