Browser Fingerprinting

9 августа 2026 · ~15 мин чтения

приватность веб трекинг реклама безопасность антифрод

Browser Fingerprinting

Browser fingerprinting (отпечаток браузера) — это способ идентифицировать пользователя не по логину и не по кукам, а по совокупности мелких технических признаков его браузера: версия, шрифты, разрешение экрана, поведение видеокарты, звук, часовой пояс и десятки других. По отдельности каждый признак ничего не значит, но их набор часто оказывается уникальным на миллионы людей.

История

Идея, что «браузер выдаёт себя сам», старше, чем её осознанное применение. Ещё в конце девяностых веб-сервер получал от каждого посетителя User-Agent — строку с названием браузера и ОС; тогда её использовали, чтобы отдать правильную версию сайта. Но идея «сложить все такие крошки в отпечаток» стала громкой только в 2010 году.

Что это такое

Разберём по слоям. Когда браузер открывает страницу, он общается с сервером и с JavaScript-кодом сайта. В этом общении он раскрывает про себя большое количество мелочей — часть по протоколу HTTP (заголовки), часть через JavaScript API (запросы к настройкам, к экрану, к видеокарте). Каждая такая мелочь называется сигналом (signal) или атрибутом отпечатка.

Отдельно ни один сигнал не идентифицирует. Разрешение 1920×1080 у миллионов людей. Часовой пояс «Europe/Moscow» — у десятков миллионов. Но если сложить: «Chrome 141 на macOS 15.2, разрешение 1920×1080, часовой пояс Europe/Moscow, 24 конкретных шрифта в конкретном порядке, canvas-хеш abc123, WebGL-рендерер Apple M2, аудиоконтекст с определённым уровнем шума» — комбинация может оказаться уникальной на всю выборку.

Ключевое понятие здесь — энтропия (entropy — мера различимости, буквально «сколько битов информации несёт признак»). Один бит энтропии делит аудиторию пополам, десять бит — на тысячу подмножеств, двадцать — на миллион. Panopticlick оценивал среднего пользователя примерно в 18–20 бит суммарной энтропии от совокупности сигналов, чего с запасом хватает, чтобы выделить его на фоне миллионов посетителей одного сайта.

Явные пары, которые важно различать:

Аналогии из жизни

Голос по телефону. Ты звонишь в банк и говоришь «здравствуйте». Собеседник, если он тебя когда-то слышал, узнаёт тебя по тембру, темпу речи, микроакценту, паузам — не по имени, которое ты ещё не назвал. Ты не давал согласия быть узнанным; узнавание произошло из того, что ты и так вынужденно раскрыл, чтобы говорить. Где работает: аналогия хорошо ложится на пассивный фингерпринтинг — узнают из того, что уже утекает. Где ломается: голос — один непрерывный сигнал; отпечаток браузера — это десятки независимых атрибутов, из которых считают статистику. И голос сравнительно устойчив по годам; отпечаток «стареет» за недели-месяцы, потому что браузеры обновляются, ты меняешь монитор, ставишь новый шрифт.

Почерк в подписи на чеке. Кассир не идентифицирует тебя по почерку — но если ты приходишь в магазин каждый день и подписываешь чеки, продавец начинает узнавать «эту закорючку» и уже потом соотносит её с твоей внешностью. Совокупность мелких особенностей письма (наклон, нажим, форма Т и Р) — это буквально сигналы отпечатка. Где работает: аналогия показывает, что один признак ничего не значит, а сумма — уже идентификатор. Где ломается: почерк принадлежит человеку и стабилен; отпечаток браузера принадлежит связке «человек + устройство + версия ПО». Если ты купил новый ноутбук, «почерк» полностью сменился, а ты — прежний.

Отпечаток шин на дороге. Криминалисты по глубине протектора, износу и колее могут сказать: «это, вероятно, та же машина, что проезжала здесь три дня назад». Ни одна деталь сама по себе — не улика; их сумма — да. Где работает: хорошо иллюстрирует статистический характер идентификации: не «да/нет», а «с высокой вероятностью тот же». Где ломается: следы шин остаются на дороге, а отпечаток браузера собирается на сервере в момент визита — сравнить старый и новый след может только тот, кто заранее хранил базу отпечатков.

Как это работает

Технически процесс делится на три этапа: сбор сигналов, нормализация и хеширование, сопоставление.

1. Сбор сигналов

Что именно собирают. Разделим на пассивные (сервер получает сам) и активные (нужен JavaScript).

Пассивные:

Активные (JavaScript):

2. Нормализация и хеш

Собранные значения приводят к общему виду: строки в нижний регистр, списки шрифтов сортируются, версии обрезаются до мажорной. Потом всё склеивается в одну длинную строку и от неё считается хеш (обычно SHA-1 или SHA-256, реже что-то специализированное). Иногда хеш не один, а несколько — по группам сигналов, чтобы один изменённый признак не ломал всё сравнение.

Схема примерно такая:

[browser] ─────────────► [сигналы: UA, canvas, шрифты, ...]
                                    │
                                    ▼
                         [нормализация: сортировка,
                          обрезание версий, унификация]
                                    │
                                    ▼
                          [конкатенация в одну строку]
                                    │
                                    ▼
                        [SHA-256 → fingerprint hash]
                                    │
                                    ▼
                     [сравнение с базой отпечатков
                       → вероятность «это тот же»]

3. Сопоставление

Ключевой момент: серьёзные системы (FingerprintJS, ThreatMetrix) не сравнивают отпечатки как строгие равенства. Они используют fuzzy matching (нечёткое сопоставление): считают, сколько сигналов совпало, сколько поменялось, и на этой основе выдают вероятность «это тот же посетитель». Это принципиально: браузер обновился с версии 140 на 141 — старый жёсткий хеш перестал совпадать, но отпечаток «это тот же ноут» уверенно узнаётся.

Server-side vs client-side. Пассивные сигналы обрабатываются на сервере (там уже есть заголовки и TLS-параметры). Активные — на клиенте: JavaScript собирает их и отправляет POST-запросом. Многие защитные системы делают гибрид: часть сигналов считают на клиенте, часть на сервере, а решение принимают в облаке провайдера антифрода.

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Реально работающие продукты и компании, о которых я уверен:

Точные объёмы (сколько сайтов, сколько миллиардов запросов в день) я приводить не буду — цифры расходятся у разных источников, и у меня нет уверенности в конкретных значениях.

Альтернативы и конкуренты

Когда НЕ стоит использовать

Юридический контекст

Если ты внедряешь фингерпринтинг в продукт для рынка ЕС или РФ, обязательно посоветуйся с юристом по ПДн. В ЕС отпечаток при определённой связке с целями идентификации считается персональными данными; в РФ разъяснения Роскомнадзора двигаются в ту же сторону. Cookie-баннер тебя не спасает, потому что фингерпринтинг может идти в обход прямо в момент загрузки страницы.

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера в задаче аудита рекламных пикселей на сайте выяснилось, что цепочка редиректов рекламной сети включает отдельные эндпойнты сбора отпечатков браузера, из-за чего мониторинг переписали так, чтобы фиксировать весь каскад запросов, а не только первый хит. По ходу разбора всплыло, что часть «лишних» вызовов на сторонние домены — это именно активный фингерпринтинг, а не аналитика; это меняет отношение к их согласованию с юристами.

Краткое резюме