Пошаговый чек-лист для проверки собственного отпечатка браузера: UA, часовой пояс, GPU, шрифты и признаки автоматизации — раньше, чем это сделает детектор.
Системы обнаружения проверяют не только то, уникален ли ваш отпечаток браузера, — они также проверяют его согласованность, о чём подробно рассказано в статье Согласованность отпечатка: несовпадения сигналов вас выдают. Это была теория. Этот пост — практика: конкретный чек-лист, который можно применить к собственному браузеру пункт за пунктом, прежде чем это сделает реальная система обнаружения. Откройте проверку отпечатка BrowserInsight во второй вкладке и сверяйтесь с ней по каждому пункту ниже.
Ключевые выводы
- Пройдите семь проверок: UA против ОС/платформы, часовой пояс против геолокации по IP,
Accept-Languageпротив региона IP, производитель GPU/WebGL против заявленной ОС, установленные шрифты против заявленной ОС, адекватность размера экрана/device pixel ratio и признаки автоматизации. - Каждая проверка сравнивает два сигнала, которые должны рассказывать одну и ту же историю об одном устройстве — несовпадение в любом месте — это первое, что ищет система оценки согласованности.
- Большинство проверок занимают меньше минуты с помощью проверки отпечатка и проверки ядра BrowserInsight — дополнительные инструменты не нужны.
- Одно несовпадение редко вызывает срабатывание само по себе; чек-лист особенно полезен для выявления накопления мелких несогласованностей, оставленных приватным расширением, VPN или профилем anti-detect браузера.
- Относитесь к этому как к самопроверке, а не гарантии — реальные системы обнаружения также оценивают поведение и сетевые сигналы, которые статичный чек-лист не видит.
Перед началом
Откройте инструмент проверки отпечатка в одной вкладке и проверку ядра в другой. Проверка отпечатка показывает в одном месте ваш user-agent, рендерер WebGL, часовой пояс, массив языков, параметры экрана и список шрифтов; проверка ядра сравнивает заявленный браузер с тем, как на самом деле выглядит движок JavaScript изнутри — это полезно для выявления UA, который заявляет не тот браузер, что запущен на самом деле. Пройдите семь проверок ниже по порядку; каждая занимает меньше минуты.
1. User-Agent против ОС/платформы
Сравните строку user-agent и navigator.platform. Называют ли они одну и ту же операционную систему? UA, заявляющий "Windows NT 10.0", вместе со значением platform, равным MacIntel, или UA iPhone в паре со строкой платформы Win32 — это внутреннее противоречие: оба значения должны поступать из одного и того же API уровня ОС и не могут расходиться на реальном устройстве.
Пройдено: UA и platform называют одно семейство ОС.
Не пройдено: UA заявляет одну ОС, а navigator.platform сообщает другую.
2. Часовой пояс против геолокации по IP
Проверьте Intl.DateTimeFormat().resolvedOptions().timeZone — системный часовой пояс, который сообщает ваша ОС, — против региона, к которому геолоцируется ваш IP-адрес в инструменте IP-разведки. Часовой пояс America/Chicago за сингапурским IP объясним (путешественник, VPN), но именно это несоответствие, оцененное вместе с другими сигналами, лежит в основе того, как сайты обнаруживают VPN.
Пройдено: Регион часового пояса правдоподобен для геолокации IP. Не пройдено: Часовой пояс и геолокация IP указывают на разные континенты или смещения времени без объяснения в виде путешествия/VPN.
3. Accept-Language против региона IP
Сравните navigator.languages (и заголовок Accept-Language, который отправляют ваши запросы) с языком, ожидаемым для региона вашего IP. navigator.languages отражает порядок локалей ОС, а не просто настройку браузера, поэтому сессия, заявляющая "Chrome в США", в которой navigator.languages содержит только ["zh-TW", "vi"] без единого английского значения, уже необычна сама по себе и быстро накапливает вес в сочетании с несовпадением из проверки часового пояса выше.
Пройдено: Хотя бы один из заявленных языков соответствует тому, что типично для региона IP. Не пройдено: Весь список языков неправдоподобен для заявленного местоположения, особенно в сочетании с другими несовпадениями.
4. Производитель GPU/WebGL против заявленной ОС
Откройте раздел WebGL в проверке отпечатка и прочитайте немаскированную строку рендерера. Определённые графические бэкенды существуют только на определённых операционных системах: токен Direct3D в строке рендерера может исходить только от Windows, а строка ANGLE (Apple, ...) или на базе Metal — только от macOS. Если ваш UA заявляет macOS, а строка рендерера называет бэкенд Direct3D, это сочетание не просто редкое — оно физически невозможно на реальном устройстве.
Пройдено: Бэкенд строки рендерера согласуется с ОС, заявленной в UA. Не пройдено: Строка рендерера называет бэкенд, которого не существует на заявленной ОС.
5. Установленные шрифты против заявленной ОС
Каждая настольная ОС поставляется с уникальным набором шрифтов по умолчанию, которых нет у других: Windows включает такие шрифты, как Calibri и Segoe UI, macOS — San Francisco и Helvetica Neue, а распространённые дистрибутивы Linux не содержат ни тех, ни других. Сравните список шрифтов, который показывает проверка отпечатка, с заявленной ОС — сессия "Windows" без единого шрифта, эксклюзивного для Windows, или список шрифтов, смешивающий шрифты, эксклюзивные только для macOS и только для Windows, — признак того, что профиль был собран искусственно, а не запущен на реальной машине.
Пройдено: Обнаруженные шрифты включают хотя бы часть шрифтов, эксклюзивных для заявленной ОС, и не включают шрифтов, эксклюзивных для другой ОС. Не пройдено: Список шрифтов противоречит заявленной ОС или смешивает шрифты операционных систем, которые не могут сосуществовать.
6. Адекватность размера экрана/device pixel ratio
Если ваш UA заявляет телефон (iPhone или Android), размеры экрана и поддержка touch должны совпадать. UA телефона, сообщающий разрешение экрана 2560×1440 без touch-событий, или device pixel ratio, не соответствующий ни одной выпущенной модели телефона, — один из самых частых огрехов, которые оставляют десктопные инструменты автоматизации, подменяющие строку UA без корректировки модели устройства под ней.
Пройдено: Размер экрана, device pixel ratio и поддержка touch согласуются с реальным устройством, соответствующим заявленному UA. Не пройдено: Мобильный UA сообщает десктопное разрешение и/или отсутствие touch-поддержки, или наоборот.
7. Признаки автоматизации
Наконец, проверьте прямые признаки автоматизации: сообщает ли navigator.webdriver значение true? Существует ли объект window.chrome, если он должен существовать для заявленного браузера? Возвращают ли navigator.plugins и Permissions API внутренне согласованные, непустые результаты? Это первое, что проверяет любой конвейер обнаружения ботов, ещё до сравнений согласованности выше, и подробно об этом рассказано в статье обнаружение headless-браузеров.
Пройдено: navigator.webdriver равен false/undefined, а данные о плагинах и разрешениях выглядят как у обычного настольного браузера.
Не пройдено: navigator.webdriver сообщает true, либо свойства вокруг него выглядят искусственно пропатченными.
Как интерпретировать результаты
Одна проваленная проверка сама по себе редко фатальна — реальные пользователи иногда оказываются в необычных сочетаниях. Оценку резко повышает накопление: несовпадающий часовой пояс плюс несовпадающий язык плюс список шрифтов, не подходящий заявленной ОС, — это совсем другая история, чем любой из пунктов по отдельности. Если вы используете приватный браузер, расширение или VPN, ожидайте, что проверка часового пояса/IP законно провалится — это ожидаемый компромисс, а не ошибка, — но проверки GPU, шрифтов и признаков автоматизации на реальном устройстве всё равно должны проходить, поскольку смена сетевого пути или строки UA их не затрагивает.
Часто задаваемые вопросы
Нужно ли проходить каждый пункт чек-листа?
Не обязательно. Пользователь VPN часто намеренно "проваливает" проверку часового пояса/IP — в этом и смысл использования VPN — при этом проходя все остальные пункты. Чек-лист наиболее полезен для выявления неожиданных провалов, особенно тех, которые нельзя объяснить инструментом, который вы сознательно используете.
Какой пункт чек-листа сложнее всего исправить с помощью приватного инструмента?
Строка рендерера GPU/WebGL (пункт 4) и установленные шрифты (пункт 5) сложнее всего, потому что они считываются из оборудования и ОС соответственно, а не из настройки браузера — убедительно подделать их требует больше, чем изменение заголовка или свойства, доступного из JavaScript.
Можно ли пройти этот чек-лист на мобильном устройстве?
Да, хотя пункт 5 (шрифты) и пункт 6 (экран/DPR) имеют другое значение — мобильные ОС поставляются с более узким, более единообразным набором шрифтов, и для мобильного UA основным критерием становится согласованность экрана/touch. О том, что действительно отличает устройства на мобильных платформах, рассказано в статье фингерпринтинг мобильного браузера.
Заключение
Ни одна из этих семи проверок не требует инструментов помимо тех, что BrowserInsight уже выполняет на стороне клиента. Пройдя их по порядку — UA/платформа, часовой пояс/IP, язык/IP, GPU/ОС, шрифты/ОС, экран/touch и признаки автоматизации — вы обнаружите те же несовпадения, которые ищет настоящая система оценки согласованности, причём в том же порядке, в каком их проверяет большинство конвейеров обнаружения: сначала дешёвые проверки с почти нулевой долей ложных срабатываний, затем вероятностные. Запустите проверку отпечатка и проверку ядра вместе, и вы узнаете раньше любого детектора, рассказывает ли ваша конфигурация одну согласованную историю.
Рекомендуем прочитать:


