Отпечатки

Fingerprinting Network Info API: идентичность соединения

Как свойства navigator.connection, такие как effectiveType, RTT и downlink, создают сетевые отпечатки и как их контролировать.

Документация

Нужна структурированная документация по теме Отпечатки?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

Введение

Современные веб-браузеры раскрывают детали подключения через Network Information API (navigator.connection). Этот API изначально был разработан, чтобы помочь веб-разработчикам доставлять контент более эффективно. Например, веб-сайт может показывать изображения с более низким разрешением пользователям с медленным соединением или откладывать некритичные ресурсы при ограниченной пропускной способности. Свойства вроде effectiveType, rtt (время кругового обхода), downlink (оценка пропускной способности) и type (тип соединения) все участвуют в этих адаптивных решениях.

Хотя эта функциональность улучшает опыт просмотра, она также вводит значительную поверхность для снятия отпечатков. Каждый раз, когда ваш браузер сообщает характеристики соединения, он делится информацией о вашей сетевой среде, вашем провайдере и, возможно, даже о вашем географическом местоположении. Эти данные в сочетании с другими сигналами браузера создают более конкретный профиль, который может использоваться для идентификации и отслеживания пользователей между сессиями без их ведома или согласия.

BotBrowser обеспечивает защиту отпечатков на уровне движка для всех свойств navigator.connection, гарантируя, что значения, сообщаемые браузером, соответствуют загруженному профилю отпечатков, а не раскрывают вашу реальную сетевую среду.

Почему информация о сети важна для конфиденциальности

Данные о сетевом подключении создают уникальную проблему конфиденциальности, потому что значения динамичны. В отличие от статических свойств браузера, таких как разрешение экрана или установленные шрифты, сетевые метрики меняются со временем. Однако паттерны, создаваемые этими изменяющимися значениями, все равно могут служить мощными средствами отслеживания, особенно в сочетании с другими сигналами отпечатков.

Вот почему информация о сети вызывает обеспокоенность по поводу конфиденциальности для исследователей, тестировщиков и всех, кто ценит свою онлайн-приватность:

  • Географическое раскрытие: значения задержки соединения коррелируют с физическим расстоянием до серверов. Если ваш браузер постоянно сообщает о низкой задержке к серверам в одном регионе и высокой задержке к серверам в другом, этот паттерн раскрывает ваше приблизительное местоположение даже без данных геолокации IP.
  • Профилирование провайдера и типа подключения: различные интернет-провайдеры и технологии подключения создают характерные сетевые сигнатуры. Оптоволоконное соединение создает измеримо отличающиеся паттерны задержки и пропускной способности по сравнению с мобильным соединением или спутниковым каналом. Эти различия помогают сузить вашу идентичность.
  • Раскрытие прокси и VPN: при подключении через прокси или VPN значения navigator.connection могут не соответствовать ожидаемому сетевому поведению для местоположения выхода прокси. Это несоответствие между сообщаемыми данными о соединении и видимым IP-адресом может выявить использование прокси, подрывая конфиденциальность, которую прокси должен был обеспечить.
  • Корреляция сессий: хотя отдельные сетевые показания колеблются, статистическое распределение ваших значений подключения со временем формирует распознаваемый паттерн. Этот паттерн может использоваться для связывания отдельных сессий просмотра с одним и тем же пользователем.

Свойство saveData, указывающее, включил ли пользователь режим экономии данных, добавляет ещё одно измерение к этому отпечатку. Только небольшой процент пользователей включает эту функцию, что делает её отличительным идентификатором само по себе.

Исследование INRIA обнаружило, что информация о сети в сочетании с анализом таймингов может повысить точность межсессионной идентификации пользователей до 8% по сравнению со снятием отпечатков без сетевых данных. API не требует разрешений и работает беззвучно в фоновом режиме, что делает его особенно тревожным с точки зрения конфиденциальности.

Понимание Network Information API

Какие свойства раскрываются

Network Information API делает несколько свойств доступными через navigator.connection:

  • effectiveType: классифицирует соединение как slow-2g, 2g, 3g или 4g на основе наблюдаемых метрик производительности.
  • rtt: оценка времени кругового обхода в миллисекундах, округленная до ближайших 25 мс.
  • downlink: оценка нисходящей пропускной способности в мегабитах в секунду, округленная до ближайших 25 Кбит/с.
  • type: базовая технология подключения, такая как wifi, cellular, ethernet или unknown.
  • saveData: логическое значение, указывающее, запросил ли пользователь сниженное использование данных.

Почему стандартные инструменты конфиденциальности не справляются

Понимание того, почему распространенные подходы не решают проблему сетевого снятия отпечатков, помогает объяснить, почему BotBrowser использует другой подход.

VPN и прокси-серверы изменяют ваш видимый IP-адрес, но не модифицируют значения, сообщаемые navigator.connection. Ваш браузер продолжает измерять и сообщать реальные сетевые условия. Во многих случаях дополнительные накладные расходы маршрутизации VPN фактически делают сетевой отпечаток более отличительным, создавая необычную комбинацию высокой задержки с IP-адресом, предполагающим близкое расположение.

Приватный просмотр и режим инкогнито не изменяют информацию о сети вообще. API navigator.connection сообщает одни и те же значения независимо от того, находитесь ли вы в приватной сессии.

Расширения браузера могут пытаться переопределить свойства navigator.connection, но сталкиваются с фундаментальными проблемами согласованности. Установка статических переопределенных значений создает сетевой профиль, который никогда не меняется, что само по себе необычно. Более того, расширения работают на уровне выше движка браузера, а это значит, что другие API и внутренние механизмы браузера все равно могут сообщать реальное состояние сети, создавая противоречия, которые легко выявить.

Полная блокировка API тоже проблематична. Если navigator.connection отсутствует или возвращает неожиданные значения, само это отсутствие становится отличительным сигналом. Очень немногие легитимные конфигурации браузеров полностью лишены этого API.

Эти ограничения существуют потому, что информация о сети глубоко интегрирована в движок браузера. Эффективная защита требует контроля на том же уровне, где значения создаются.

Как BotBrowser защищает вашу сетевую идентичность

BotBrowser решает проблему снятия сетевых отпечатков на уровне движка браузера. Вместо попыток перехвата или модификации значений после их генерации, BotBrowser контролирует, какие значения сообщает API navigator.connection изначально. Это обеспечивает полную согласованность по всем методам доступа, будь то прямое чтение свойств, прослушивание событий изменения или проверка внутренних ссылок браузера.

Защита сети на основе профиля

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

chrome --bot-profile="/path/to/profile.enc" \
       --user-data-dir="$(mktemp -d)"

Профиль содержит согласованные и реалистичные значения rtt, downlink, effectiveType, type и saveData для типа подключения, которое профиль представляет. Это означает, что вам не нужно вручную настраивать отдельные сетевые свойства. Профиль обрабатывает их все вместе, поддерживая связи между значениями, которые демонстрирует реальный браузер.

Явное переопределение сетевой информации

Для сценариев, где требуется явный контроль над сообщением сетевой информации, BotBrowser предоставляет флаг --bot-network-info-override:

chrome --bot-profile="/path/to/profile.enc" \
       --bot-network-info-override \
       --user-data-dir="$(mktemp -d)"

Когда этот флаг включен, браузер сообщает значения сетевой информации исключительно из профиля, а не измеряет реальное сетевое подключение. Это также контролирует соответствующие заголовки Client Hints (RTT, Downlink, ECT, Save-Data), обеспечивая согласованность между значениями JavaScript API и значениями HTTP-заголовков. Переопределение применяется ко всем свойствам и предотвращает утечку реальных изменений сетевого состояния через API во время сессии.

Согласованная защита при использовании прокси

Один из самых важных вариантов использования защиты сетевой информации - поддержание согласованности при просмотре через прокси. BotBrowser обеспечивает соответствие значений navigator.connection ожидаемым сетевым характеристикам для местоположения прокси:

chrome --bot-profile="/path/to/profile.enc" \
       --proxy-server="http://us-proxy:8080" \
       --bot-network-info-override \
       --user-data-dir="$(mktemp -d)"

Когда профиль настроен с сетевыми значениями, подходящими для географического региона прокси, вся идентичность просмотра остается когерентной. Сообщаемые характеристики подключения соответствуют ожиданиям для пользователя в этом месте, устраняя несоответствия, которые традиционно раскрывают использование прокси.

Управление событиями изменения

В стандартном браузере объект navigator.connection генерирует событие change при изменении сетевых условий. Эти переходы могут раскрывать информацию о вашей реальной среде, например, переключение с Wi-Fi на мобильные данные. BotBrowser управляет событием change в соответствии с ожидаемой стабильностью сети профиля, обеспечивая, чтобы реальные изменения в вашей хостовой сети не просочились во время сессии.

Примеры конфигурации

Базовое использование CLI

# Защита сетевой информации на основе профиля
chrome --bot-profile="/path/to/profile.enc" \
       --user-data-dir="$(mktemp -d)"

# С явным переопределением сетевой информации для полного контроля
chrome --bot-profile="/path/to/profile.enc" \
       --bot-network-info-override \
       --user-data-dir="$(mktemp -d)"

Интеграция с Playwright

const { chromium } = require('playwright-core');

(async () => {
  const browser = await chromium.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/path/to/profile.enc',
      '--bot-network-info-override',
    ],
    headless: true,
  });

  const context = await browser.newContext({ viewport: null });
  const page = await context.newPage();

  const networkInfo = await page.evaluate(() => {
    const conn = navigator.connection;
    return {
      effectiveType: conn.effectiveType,
      rtt: conn.rtt,
      downlink: conn.downlink,
      type: conn.type,
      saveData: conn.saveData,
    };
  });

  console.log('Network info:', networkInfo);
  await browser.close();
})();

Интеграция с Puppeteer

const puppeteer = require('puppeteer-core');

(async () => {
  const browser = await puppeteer.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/path/to/profile.enc',
      '--bot-network-info-override',
    ],
    headless: true,
    defaultViewport: null,
  });

  const page = await browser.newPage();
  await page.goto('about:blank');

  const connInfo = await page.evaluate(() => ({
    effectiveType: navigator.connection.effectiveType,
    rtt: navigator.connection.rtt,
    downlink: navigator.connection.downlink,
  }));

  console.log('Connection info:', connInfo);
  await browser.close();
})();

Полная согласованность идентичности

Для комплексной защиты отпечатков объедините контроль сетевой информации с другими настройками идентичности для создания полностью согласованного профиля просмотра:

chrome --bot-profile="/path/to/profile.enc" \
       --proxy-server="socks5://user:pass@us-proxy:1080" \
       --bot-network-info-override \
       --bot-config-timezone="America/New_York" \
       --bot-config-locale="en-US" \
       --user-data-dir="$(mktemp -d)"

Эта конфигурация обеспечивает, что ваш часовой пояс, локаль, сетевая информация и IP-адрес рассказывают одну и ту же географическую историю, создавая когерентную и реалистичную идентичность просмотра.

Верификация

После запуска BotBrowser с профилем вы можете проверить, что защита сетевой информации работает корректно:

const conn = navigator.connection;
console.log('effectiveType:', conn.effectiveType);
console.log('downlink:', conn.downlink, 'Mbps');
console.log('rtt:', conn.rtt, 'ms');
console.log('type:', conn.type);
console.log('saveData:', conn.saveData);

// Проверка стабильности значений со временем
setTimeout(() => {
  console.log('After 5s - rtt:', conn.rtt, 'downlink:', conn.downlink);
}, 5000);

Что проверять:

  1. effectiveType соответствует классу сети профиля (4g для широкополосных соединений, 3g для более медленных)
  2. Значение rtt согласуется с местоположением прокси (меньшие значения для ближних серверов, большие для удаленных)
  3. downlink реалистичен для типа подключения, представленного профилем
  4. Значения остаются стабильными в течение сессии без неожиданных изменений
  5. saveData соответствует конфигурации профиля
  6. Инструменты тестирования отпечатков не сообщают об аномалиях или несоответствиях

Лучшие практики

  1. Всегда используйте --bot-network-info-override при работе с прокси. Это самая важная рекомендация. Без переопределения реальные сетевые измерения могут просочиться и противоречить ожидаемым характеристикам для местоположения прокси, потенциально подрывая вашу конфигурацию конфиденциальности.

  2. Сопоставляйте сетевые значения с географией. Выбирайте профили с сетевыми значениями, реалистичными для местоположения используемого прокси. Профиль, настроенный для широкополосного соединения, должен иметь значения задержки, имеющие смысл для географического региона вашего прокси-сервера.

  3. Используйте профили, снятые с реальных устройств. Профили BotBrowser включают значения сетевой информации из реальных захватов устройств, обеспечивая реалистичность и внутреннюю согласованность. Это гораздо надежнее, чем ручное указание отдельных сетевых параметров.

  4. Комбинируйте защиту сети с другими средствами контроля отпечатков. Информация о сети наиболее эффективна как сигнал отпечатка в сочетании с другими данными. Аналогично, защита сетевой информации наиболее эффективна в сочетании с другими средствами контроля отпечатков BotBrowser, включая часовой пояс, локаль и защиту WebRTC.

  5. Проверяйте конфигурацию перед началом важных сессий. Используйте скрипт проверки выше, чтобы убедиться, что все сетевые значения сообщаются корректно и остаются стабильными.

Часто задаваемые вопросы

Доступен ли Network Information API во всех браузерах?

Нет. Полный API со всеми свойствами доступен в Chrome, Edge и Opera. Firefox имеет ограниченную поддержку, а Safari не поддерживает его вообще. Профили BotBrowser учитывают уровень поддержки API целевого браузера, поэтому отпечаток остается согласованным с эмулируемым брендом браузера.

Контролирует ли BotBrowser заголовки Client Hints, связанные с сетевой информацией?

Да. Когда --bot-network-info-override включен, BotBrowser контролирует как значения JavaScript API, так и соответствующие HTTP-заголовки Client Hints (RTT, Downlink, ECT, Save-Data). Это обеспечивает согласованность между тем, что страница может прочитать через JavaScript, и тем, что сервер видит в заголовках запросов.

Могут ли веб-сайты измерить реальную сетевую задержку через другие API?

Да. Resource Timing API (performance.getEntriesByType('resource')) может измерить фактическую задержку запросов. Средства контроля таймингов BotBrowser через --bot-time-scale помогают поддерживать согласованность между значениями navigator.connection и наблюдаемым таймингом запросов, обеспечивая дополнительный уровень защиты отпечатков.

Имеет ли свойство saveData значение для снятия отпечатков?

Да. Только небольшой процент пользователей включает режим экономии данных, что делает его отличительным сигналом при наличии. Профили BotBrowser устанавливают saveData в соответствии с конфигурацией целевого устройства. Для большинства десктопных профилей это значение false, отражающее типичные паттерны использования.

Как BotBrowser обрабатывает изменения сетевого состояния во время сессии?

BotBrowser управляет событием change на navigator.connection, чтобы реальные сетевые переходы на хостовой машине не просочились к веб-странице. Сообщаемое состояние сети остается согласованным с загруженным профилем на протяжении всей сессии, независимо от того, что происходит в реальной сети.

Защищает ли это от серверного измерения задержки?

Нет. Серверное измерение задержки, при котором сервер измеряет время кругового обхода своих собственных запросов, работает вне браузера и не может быть контролируемо никаким клиентским инструментом. Защита сетевой информации BotBrowser контролирует значения клиентского API. Для согласованности на сетевом уровне используйте подходящий прокси-сервер, обеспечивающий реалистичные характеристики задержки для целевого географического региона.

Могу ли я установить пользовательские значения сетевой информации без профиля?

Флаг --bot-network-info-override работает совместно с загруженным профилем. Профиль предоставляет конкретные значения для сообщения. Если вам нужны другие сетевые характеристики, используйте другой профиль, соответствующий желаемой конфигурации, или скомбинируйте текущий профиль с подходящей настройкой прокси.

Итоги

Network Information API раскрывает характеристики подключения, которые служат сигналами снятия отпечатков и могут выявить использование прокси через несоответствия задержки и пропускной способности. BotBrowser обеспечивает комплексную защиту отпечатков для всех свойств navigator.connection на уровне движка, используя профили и флаг --bot-network-info-override для обеспечения реалистичности, стабильности и согласованности сообщаемых значений с общей идентичностью просмотра. Контролируя как JavaScript API, так и соответствующие заголовки Client Hints, BotBrowser обеспечивает полную защиту сетевой информации, работающую в гармонии с конфигурациями прокси, настройками часового пояса и другими средствами контроля идентичности. Смежные темы: proxy configuration, DNS leak prevention и timezone and locale configuration.

#Network-Info#Connection#Rtt#fingerprinting#Privacy#Downlink

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.