Как работает цифровой отпечаток браузера через Canvas, WebGL и аудио, и как обнаружить и снизить отслеживание с помощью BrowserInsight.
Что такое цифровой отпечаток браузера?
Цифровой отпечаток браузера (browser fingerprinting) — это технология идентификации и отслеживания пользователей путём сбора различных характеристик их браузера и устройства. В отличие от традиционных cookie, цифровой отпечаток браузера не требует хранения каких-либо данных на устройстве пользователя, поэтому сайты способны узнавать одного и того же пользователя даже после очистки данных браузера — о том, почему очистка cookie, переход в приватный режим или смена VPN не сбрасывают ID, построенный таким образом, читайте в статье Visitor ID: как он переживает инкогнито, VPN и кеш.
Как работает цифровой отпечаток браузера
Когда вы посещаете сайт, ваш браузер автоматически отправляет на сервер большой объём информации, включая:
- User-Agent: тип и версия браузера, а также сведения об операционной системе
- Разрешение экрана: размер дисплея и глубина цвета
- Часовой пояс: настройки локального времени устройства
- Установленные шрифты: список доступных в системе шрифтов
- Canvas-отпечаток: едва заметные различия в графике, отрисованной через HTML5 Canvas на разных устройствах
- WebGL-отпечаток: информация о видеокарте и драйверах
- Аудиоотпечаток: характеристики аудиопроцессора
- Геометрия вёрстки: субпиксельные измерения позиций элементов и текста на странице, считываемые через обычные API вёрстки DOM, а не через canvas — см. ClientRects-фингерпринтинг
- Медиаустройства: количество и ID подключённых камер и микрофонов, считываемые через
enumerateDevices(), а после выдачи разрешения — и их модельные метки — см. фингерпринтинг медиаустройств, что раскрывается до и после выдачи доступа - Установленные голоса: список голосов синтеза речи операционной системы и браузера, раскрываемый через
speechSynthesis.getVoices()без запроса разрешения — см. фингерпринтинг синтеза речи, как этот список меняется от платформы к платформе - Настройки и шрифты через CSS: правила
@mediaи@font-faceраскрывают тёмную/светлую тему, тип указателя и установленные шрифты уже через то, какой сетевой ресурс решает загрузить таблица стилей — см. CSS-фингерпринтинг: отслеживание без JavaScript, почему этот канал переживает даже полностью отключённый JavaScript - Состояния разрешений: какие из ~15 названий разрешений распознаёт
navigator.permissions.query()и резолвится ли каждое вgranted,deniedилиprompt— проверяется без единого диалога; см. Фингерпринтинг Permissions API, как паттерн поддержки и вектор состояний складываются вместе - Сведения о сети: грубые параметры соединения —
effectiveType,downlink,rtt,saveData— считываемые черезnavigator.connectionбез единого запроса разрешения и доступные только в Chromium; см. Фингерпринтинг Network Information API, как эти сгруппированные в корзины значения добавляют энтропию и заодно служат проверкой движка браузера
Исследования цифровых отпечатков браузеров показали, что при объединении достаточного количества таких сигналов подавляющее большинство браузеров становятся уникально идентифицируемыми. На практике отпечаток вашего браузера может быть почти столь же индивидуальным, как реальный отпечаток пальца.
Каждый сигнал по отдельности слаб — у множества людей совпадают разрешение экрана или часовой пояс. Фингерпринтинг работает потому, что эти значения по большей части независимы, так что их объединение многократно увеличивает различимость. На языке теории информации каждый атрибут добавляет несколько бит энтропии, и как только суммарная энтропия превышает примерно 33 бита, браузер становится фактически уникальным среди всех людей на Земле — этот порог впервые был продемонстрирован в масштабе исследованием Panopticlick от EFF (Eckersley, 2010) и подтверждён более поздними работами, такими как Laperdrix et al. Типичная комбинация из user-agent, списка шрифтов, canvas и WebGL зачастую преодолевает этот порог сама по себе.
WebRTC — связанный, но отдельный риск, причём сразу в двух формах. Самая известная проблема — это сетевая утечка, которая может раскрыть ваш реальный IP-адрес даже за VPN. О том, как проверить и закрыть эту утечку, читайте в статье Защита от утечек WebRTC. Отдельно от этого WebRTC раскрывает и небольшую поверхность для фингерпринтинга — через поддерживаемые кодеки и структуру SDP, никак не связанную с вашим IP. О том, как работает этот сигнал и почему устранение утечки его не убирает, читайте в статье Фингерпринтинг WebRTC.
Эти сигналы весят по-разному в зависимости от устройства. Массовое производство телефонов сглаживает энтропию canvas, WebGL и шрифтов по сравнению с огромным разнообразием конфигураций настольных ПК — зато геометрия экрана, точки касания и датчики движения добавляют сигналы, которых на десктопах почти нет. Подробнее о том, как именно отслеживают устройства на Android и iOS, читайте в статье Фингерпринтинг мобильного браузера.
Часовой пояс и язык заслуживают отдельного упоминания, потому что они одновременно служат и сигналами региона — сервис, которому нужно узнать, из какой страны вы на самом деле подключаетесь, может сравнить заявленные часовой пояс и язык с геолокацией по IP, а VPN, меняющий только IP, оставляет это противоречие на виду. О том, как именно устроена эта проверка, читайте в статье Как приложения определяют ваш реальный регион, несмотря на VPN.
Подробно о Canvas-отпечатке
Canvas-отпечаток — одна из самых мощных техник создания цифрового отпечатка браузера. Вот как это работает:
- Сайт рисует определённую графику и текст на скрытом элементе Canvas
- Содержимое Canvas преобразуется в данные изображения
- На основе данных изображения вычисляется хеш-значение
- Из-за едва заметных различий в видеокартах, драйверах и движках рендеринга браузеров на разных устройствах итоговые хеш-значения различаются
Пример кода Canvas-отпечатка
// Пример Canvas-отпечатка
function getCanvasFingerprint() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// Рисуем текст и графику
ctx.textBaseline = 'top';
ctx.font = '14px Arial';
ctx.fillStyle = '#f60';
ctx.fillRect(0, 0, 100, 20);
ctx.fillStyle = '#069';
ctx.fillText('BrowserInsight', 2, 15);
// Получаем данные изображения и вычисляем хеш
return canvas.toDataURL();
}
WebGL-отпечаток
WebGL-отпечаток использует API WebGL (Web Graphics Library) для получения сведений о вашем графическом оборудовании и о том, как оно отрисовывает 3D-контент. Поскольку видеокарты, драйверы и конвейеры рендеринга колоссально различаются от устройства к устройству, эти сведения относятся к сигналам с наибольшей энтропией, которые может собрать трекер.
На самом деле скрипт считывает две разные вещи:
1. Сообщаемые параметры. WebGL раскрывает десятки значений через getParameter() — а через расширение WEBGL_debug_renderer_info — и нескрытые строки производителя и рендерера GPU:
const gl = document.createElement('canvas').getContext('webgl');
const dbg = gl.getExtension('WEBGL_debug_renderer_info');
gl.getParameter(dbg.UNMASKED_VENDOR_WEBGL); // напр. "Google Inc. (NVIDIA)"
gl.getParameter(dbg.UNMASKED_RENDERER_WEBGL); // напр. "ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0, D3D11)"
Уже одна такая строка рендерера сужает вас до конкретного семейства GPU. В сочетании с максимальным размером текстуры, списком поддерживаемых расширений, диапазонами точности шейдеров и пределами ширины сглаженных линий набор параметров зачастую уникален сам по себе.
2. Результат отрисовки. Точно так же, как и с canvas, скрипт может отрисовать 3D-сцену за пределами экрана и вычислить хеш получившихся пикселей. Крошечные различия в вычислениях с плавающей запятой, сглаживании и оптимизациях драйверов делают этот хеш стабильным для вашей машины, но отличающимся от большинства других — даже если строка рендерера скрыта.
Поэтому WebGL-отпечаток обычно включает:
- Производителя и модель видеокарты (нескрытая строка рендерера)
- Информацию о рендерере и версии WebGL
- Поддерживаемые расширения WebGL
- Точность шейдеров и числовые пределы
- Максимальные размеры текстуры и области просмотра
- Хеш отрисованной тестовой сцены
Поскольку эти значения исходят от оборудования и драйверов, а не от настроек, которые можно переключить, WebGL — один из самых стойких сигналов для защиты. Более глубокий разбор читайте в статье Подробный разбор WebGL-отпечатка. Строка рендерера также привязана к операционной системе на архитектурном уровне — например, токен бэкенда Direct3D может исходить только от Windows, — поэтому определённые сочетания GPU и ОС не просто редки, а физически невозможны и мгновенно попадают под подозрение.
Как прочитать собственный отпечаток
Лучший способ понять степень своей уязвимости — взглянуть на собственный отпечаток. Проверка отпечатка от BrowserInsight выполняется полностью в вашем браузере — никакие данные отпечатка никогда не отправляются на сервер (поиск по IP выполняется отдельным инструментом) — и показывает вам:
- Хеш-значения вашего Canvas и WebGL и то, выглядят ли они распространёнными или редкими
- Полную строку вашего рендерера WebGL и GPU, который она раскрывает
- Обнаруженные характеристики аудиоотпечатка
- Полный набор заголовков и доступных через JavaScript атрибутов, которые может прочитать трекер
- Оценку анонимности, которая прикидывает, насколько уникальна ваша текущая конфигурация, с конкретными рекомендациями
Запустите проверку один раз в своём обычном браузере, а затем ещё раз — в приватном браузере или с включённым расширением, и сравните оценки. Это сравнение «до и после» — самый быстрый способ увидеть, какие меры защиты действительно меняют ситуацию для вашего устройства, ведь ответ различается от машины к машине. Структурированный, пошаговый способ провести такое сравнение — статья Согласованность отпечатка браузера: чек-лист самопроверки.
Как защитить цифровой отпечаток браузера
Ни один отдельный переключатель не делает вас анонимным, а доступные меры защиты следуют двум противоположным философиям: выглядеть как все (единообразие) или выглядеть каждый раз по-разному (рандомизация). Понимание того, какую из них использует тот или иной инструмент, помогает избежать их сочетания такими способами, которые дают обратный эффект.
1. Используйте браузеры с упором на приватность
Tor Browser придерживается подхода единообразия: он стандартизирует размер экрана, шрифты, вывод canvas и WebGL, так что все пользователи Tor выглядят почти одинаково, сокращая толпу, на фоне которой вы выделяетесь. Brave использует подход рандомизации — его «фарблинг» (farbling) вносит крошечный шум в показания canvas, WebGL и аудио, причём с зерном, индивидуальным для каждого сайта и каждой сессии, так что каждый сайт видит своё значение, а сами значения меняются от одной сессии к другой. Firefox предлагает privacy.resistFingerprinting (RFP), который заимствует приёмы единообразия у Tor и по умолчанию включён в самом Tor Browser. Они снижают возможность создания отпечатка разными способами, но их объединяет ключевая черта — изменение высокоэнтропийных сигналов отрисовки, а именно там это важнее всего.
2. Используйте расширения для браузера
Несколько браузерных расширений помогают защититься от отслеживания по отпечатку:
- CanvasBlocker: блокирует или подменяет Canvas-отпечатки
- Privacy Badger: автоматически блокирует трекеры
- uBlock Origin: блокирует рекламу и отслеживающие скрипты
Однако будьте избирательны: расширения работают с широким доступом к каждой странице, которую вы посещаете, и неосторожное или вредоносное расширение само может стать вектором отслеживания. Прежде чем устанавливать что-то новое, ознакомьтесь со статьёй Риски приватности браузерных расширений.
3. Отключите JavaScript
Хотя это существенно влияет на функциональность сайтов, отключение JavaScript позволяет эффективно блокировать большинство техник создания отпечатков. Вы можете использовать расширения вроде NoScript, чтобы выборочно включать JavaScript для доверенных сайтов.
4. Используйте виртуальные машины или контейнеры
Использование разных виртуальных машин или браузерных контейнеров для разных видов онлайн-активности позволяет изолировать различные отпечатки браузера, не давая трекерам связать ваши различные онлайн-идентичности.
Парадокс защиты от фингерпринтинга
Здесь есть тонкость, которую стоит понимать: редкая или агрессивно настроенная мера защиты может сделать вас более узнаваемым, а не менее. Если вы единственный посетитель, использующий определённое расширение для подмены характеристик с необычным user-agent, именно это сочетание само становится отличительным отпечатком. Вот почему инструменты единообразия, такие как Tor и Firefox RFP, стараются поместить вас в большую одинаковую толпу, а не сделать экзотичным, — и почему нагромождение множества индивидуальных настроек чаще вредит, чем помогает. Как правило, отдавайте предпочтение проторённой конфигурации по умолчанию приватного браузера, а не самостоятельно собранному набору расширений. Антидетект-браузеры — инструменты, полностью подменяющие профиль отпечатка, — доводят этот парадокс до предела: сам паттерн подмены становится сигнатурой, как объяснено в статье Как сайты обнаруживают антидетект-браузеры и подмену отпечатков. Разбор конкретных сигналов — TLS, шум canvas, шрифты, UA-CH и другие, — по которым системы обнаружения отличают подделанный профиль от настоящего устройства, читайте в статье Антидетект-браузер vs настоящий браузер: 12 сигналов.
Законные сферы применения цифрового отпечатка браузера
Хотя цифровой отпечаток браузера часто используется для рекламного отслеживания, у него есть и законные применения:
| Сценарий использования | Описание |
|---|---|
| Безопасность | Обнаружение аномальных входов в аккаунт и предотвращение мошенничества |
| Защита от ботов | Выявление и блокировка автоматизированных программ |
| Оптимизация UX | Оптимизация отображения сайта на основе характеристик устройства |
| Защита авторских прав | Отслеживание источников утечки контента |
Случай с защитой от ботов — технически самый сложный из перечисленных: о том, как сайты отделяют автоматизированный трафик от реальных посетителей, нередко используя те же самые сигналы фингерпринтинга, читайте в статье Методы обнаружения ботов.
Часто задаваемые вопросы
Это то же самое, что cookie?
Нет. Cookie — это небольшие файлы, хранящиеся на вашем устройстве, которые можно просмотреть, заблокировать или удалить. Отпечаток же выводится из характеристик вашего браузера и устройства — на вашей стороне ничего не хранится, поэтому очистка cookie или переход к новому профилю браузера его не сбрасывает. Именно это и делает фингерпринтинг труднее обойти, чем отслеживание на основе cookie. Отдельная техника, bounce tracking, обходит блокировку cookie иначе — с помощью редиректа домен трекера на мгновение становится first-party — и вообще не затрагивает характеристики вашего устройства. Ещё один способ обойтись без cookie прячется в самом HTTP-кеше: смотрите ETag и кеш-суперкуки о том, как сервер превращает обычную ревалидацию кеша в идентификатор для слежки.
Может ли инкогнито или приватный режим предотвратить фингерпринтинг?
В основном нет. Приватный режим не даёт браузеру сохранять историю, cookie и данные сайтов локально, но не меняет характеристики, из которых строится отпечаток: размер экрана, шрифты, результат отрисовки canvas и GPU выглядят в приватном окне точно так же. Сайты зачастую по-прежнему могут узнавать вас между обычными и приватными сессиями. Некоторые сайты способны даже определить сам факт, что вы находитесь в приватном окне, — о трюках со Storage API, которые за этим стоят, читайте в статье «Как сайты обнаруживают режим инкогнито и приватный просмотр».
Какая часть отпечатка браузера наиболее идентифицирующая?
Это зависит от случая, но сигналы отрисовки — canvas и WebGL — обычно труднее всего изменить, поскольку они исходят из вашего GPU и драйверов, а не из настройки, которую можно переключить. Именно поэтому они становятся наиболее ценными целями для защиты: блокировка или рандомизация вывода canvas и WebGL устраняет больше уникальности, чем подмена user-agent или часового пояса. BrowserInsight показывает, какие сигналы вносят наибольший вклад именно для вашего браузера, так что вы знаете, на что лучше всего направить усилия.
Останавливает ли VPN фингерпринтинг браузера?
Нет. VPN меняет ваш IP-адрес и видимое местоположение, но отпечаток вычисляется из вашего браузера и устройства, а не из сети — с любого IP вы выглядите одинаково. VPN действительно помогает с отдельными проблемами отслеживания по IP и утечек WebRTC, но ничего не делает с самим отпечатком. Ещё одна связанная, но отдельная техника, о которой стоит знать, — TLS-фингерпринтинг: он идентифицирует ваш клиент по TLS-рукопожатию, а не по браузерным API, и точно так же работает сквозь VPN-туннель.
Заключение
Цифровой отпечаток браузера — это мощная и незаметная техника отслеживания, которая использует присущие браузерам и устройствам характеристики для идентификации пользователей. Понимание того, как работает цифровой отпечаток браузера, — первый шаг к защите приватности в интернете. Используя такие инструменты, как BrowserInsight, для обнаружения отпечатка своего браузера и принимая соответствующие защитные меры, вы можете лучше контролировать свою цифровую идентичность.
Помните: полную анонимность в интернете достичь сложно, но мы можем максимально усилить защиту своей приватности, понимая технологию и принимая соответствующие меры.
Рекомендуем прочитать:
- resistFingerprinting: защита Firefox и Tor от фингерпринтинга
- Согласованность отпечатка: несовпадения сигналов вас выдают
- Фингерпринтинг мобильного браузера: как отслеживают Android и iOS
- Защита от утечек WebRTC: обязательно к прочтению для пользователей VPN
- Фингерпринтинг WebRTC: как кодеки и SDP выдают ваш браузер
- Обнаружение Canvas-отпечатка: как сайты идентифицируют ваше устройство
- Аудио-фингерпринтинг: как AudioContext опознаёт устройство
- Bounce Tracking: как редиректы следят за вами без cookie
- Фингерпринтинг по шрифтам: как шрифты выдают вас
- ClientRects-фингерпринтинг: вёрстка как идентификатор
- Фингерпринтинг медиаустройств: что раскрывает enumerateDevices
- Фингерпринтинг синтеза речи: установленные голоса как сигнал
- CSS-фингерпринтинг: отслеживание без JavaScript
- Фингерпринтинг Permissions API: состояния разрешений как ID
- Фингерпринтинг Network Information API: что раскрывают downlink и RTT


