Назад в Центр знаний
Отпечатки

Что на самом деле проверяют публичные наборы тестов

Два публичных набора публикуют 49 тестов вместе. Чтение их собственных каталогов показывает, что 11 читают соединение, а четыре общих имени классифицируются по-разному.

BotBrowser Team

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

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

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

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

Кратко

  • BrowserLeaks публикует 25 маршрутов тестов, BrowserScan публикует 24, всего 49 записей без учёта того, сколько работы делает каждая.
  • Если читать заголовки разделов каждой страницы, 7 маршрутов BrowserLeaks и 4 маршрута BrowserScan называют величину соединения: рукопожатие, список шифров, кадр HTTP/2 или заголовок TCP.
  • Остаются 17 и 18 маршрутов, чьи опубликованные разделы остаются внутри документа, плюс 1 и 2 маршрута, которые не отдают ни одного раздела.
  • Два каталога делят 5 имён маршрутов: WebRTC, canvas, TLS, WebGPU и client hints. Они расходятся на 20 и 19 маршрутах соответственно.
  • Общее имя TLS это единственное, которое оба набора относят к проверке соединения.
  • Остальные четыре общих имени классифицируются по-разному, и в каждом случае различие в том, о чём говорят разделы страницы.
  • BrowserScan повторяет 83 заголовка общей навигации на каждой странице, поэтому необработанный подсчёт завышает, сколько говорит каждый тест.
  • 3 страницы в двух наборах не отдают заголовков разделов, и прогон сообщает о них как о нечитаемых вместо догадок.

Содержание

Первая панель перечисляет 25 маршрутов одного набора и 24 другого. Вторая делит каждый каталог на проверки соединения, проверки страницы и страницы без разделов, показывая 7 и 4 проверки соединения. Третья показывает пять общих имён маршрутов: TLS на стороне соединения, а WebRTC, canvas, WebGPU и client hints классифицированы по-разному.

Что публикует каждый набор

Оба сайта публикуют свой список тестов как навигацию, поэтому каталог читается без запуска чего-либо. Проба загружает каждую главную страницу, извлекает все внутренние маршруты, затем загружает каждый маршрут и оставляет только те заголовки разделов, которые добавляет сама страница: Каталог публичных наборов это другой объект, чем реестр одной библиотеки: что на самом деле проверяют публичные наборы тестов считает 25 и 24 опубликованных маршрута и находит 11, которые называют соединение. Публичный каталог и реестр одной библиотеки это разные объекты, и реестр детекторов BotD и состояния компонентов показывает форму реестра, а группы сигналов CreepJS и их объединение показывает свёртку по группам.

node=v26.9.0
parallel_pool=4
suite:BrowserLeaks -> front_status=200 bytes=12700 routes=25
suite:BrowserLeaks -> shared_chrome_headings=0
suite:BrowserLeaks -> routes=/ip /javascript /webrtc /canvas /webgl /fonts /geo /features /tls /proxy /settings /quic /http2 /tcp /chrome /webgpu /client-hints /dns /css /rects /donottrack /flash /silverlight /java /resource-urls
suite:BrowserScan -> front_status=200 bytes=134999 routes=24
suite:BrowserScan -> shared_chrome_headings=83

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

Это вычитание не косметика. До него каждый маршрут BrowserScan выглядел проверкой соединения, потому что общее меню содержит слова DNS, HTTP2, SSL и TLS. Тот, кто считает заголовки, не убрав общий блок, заключит, что все 24 маршрута проверяют соединение, и это число будет артефактом шаблона.

Размеры говорят и о том, как устроен каждый набор. Главная страница в 12,700 байт со списком 25 маршрутов это каталог: она называет тесты и отправляет читателя дальше. Главная страница в 134,999 байт с 83 навигационными записями, несущими заголовки, это оболочка приложения, и каждый маршрут её наследует. Оба решения законны и создают разные задачи измерения. В каталоге число маршрутов близко к числу тестов. В оболочке читатель должен отделить оболочку от страницы, прежде чем любой подсчёт что-то значит, а тот, кто этого не делает, сообщает число, которое принадлежит шаблону.

Где соединение появляется на странице теста

Классификатор читает собственные заголовки каждой страницы и помечает страницу как проверку соединения, когда заголовок называет величину, существующую в линии: рукопожатие, список шифров, зашифрованный client hello, кадр HTTP/2 или HTTP/3, пакет QUIC, заголовок IPv4 или TCP, размер сегмента, обмен DNS или адрес прокси.

wire:BrowserLeaks/tls -> sections=5 TLS Fingerprint | TLS Handshake | Encrypted Client Hello | Supported Cipher Suites (in order as received)
wire:BrowserLeaks/http2 -> sections=2 HTTP/2 Fingerprint | HTTP/2 Frames
wire:BrowserLeaks/tcp -> sections=5 TCP/IP Fingerprint | IPv4 Header | TCP Header | Maximum Segment Size
wire:BrowserLeaks/quic -> sections=8 QUIC Fingerprint | QUIC Connection | QUIC Initial Packets | TLS Handshake
wire:BrowserScan/tls -> sections=7 HTTP/2 Fingerprint | TLS Fingerprint | TLS handshake | TLS protocol
split:BrowserLeaks -> wire=7 page=17 unreadable=1 total=25
split:BrowserScan -> wire=4 page=18 unreadable=2 total=24

Семь и четыре. Из 49 опубликованных записей 11 называют величину соединения в своих разделах. Остальные описывают то, что читает скрипт: отрисовку canvas, метрики шрифтов, адаптер WebGPU, часовой пояс, агент пользователя, состояние разрешений.

Это соотношение и есть полезная часть измерения, и оно меньше, чем подсказывают каталоги. Набор, публикующий 25 маршрутов, приглашает к чтению, что он проверяет 25 вещей о браузере. На деле он проверяет 17 вещей, которые сообщает страница, 7 вещей, которые сообщает соединение, и 1 вещь, для которой он не отдаёт разделов. Три группы отвечают на разные вопросы, и один значок «пройдено» или «не пройдено» над ними скрывает, какая группа дала результат.

Почему одно имя может значить два теста

Пересечение каталогов это пять имён:

overlap -> shared=5 webrtc canvas tls webgpu client-hints
overlap -> BrowserLeaks_only=20 BrowserScan_only=19

Пять общих имён из 49 записей это первый вывод: два набора в основном разные продукты с небольшим общим ядром. Второй вывод это то, что происходит внутри этого ядра.

Пять общих это те, о которых браузер может дешёво ответить со страницы: что он рисует на canvas, что сообщает о графическом адаптере, что говорит в client hints, что даёт проход сбора ICE и как выглядит его рукопожатие. 39 маршрутов, которые публикует только один набор, это те, что требуют решения о том, что измерять. Один набор публикует страницы для объектов JavaScript, шрифтов, геолокации, медиазапросов, прямоугольников элементов, Do Not Track и времени загрузки ресурсов. Другой публикует страницы для сканирования портов, уязвимости версии браузера, показаний гироскопа, часового пояса против IP-локации и разрешений медиаустройств. Ни один список не является надмножеством, поэтому выбор набора это выбор, какие вопросы задавать, а не какой сайт полнее.

wire:BrowserScan/tls -> sections=7 HTTP/2 Fingerprint | TLS Fingerprint | TLS handshake | TLS protocol
page:BrowserLeaks/canvas -> sections=11 Canvas Support Detection | Canvas Fingerprint | Image File Details
page:BrowserScan/canvas -> sections=5 Canvas Function Detection | Image Details | The reason for the generation of Canvas fingerprints.
page:BrowserLeaks/webrtc -> sections=8 Your Remote IP | WebRTC Support Detection | Your WebRTC IP
page:BrowserScan/webrtc -> sections=24 After authorizing media device permissions, WebRTC will leak local IP | Media Devices API Support | Audio Permissions

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

WebRTC это место, где классификация расходится. BrowserLeaks называет разделы Your Remote IP и Your WebRTC IP, а это значения, которые собирает страница. BrowserScan называет разрешения медиаустройств и утверждение, что WebRTC раскроет локальный адрес после разрешения. Одно имя маршрута описывает адрес, собранный страницей, на одном сайте и медиапуть под разрешением на другом.

WebGPU и client hints расходятся так же. Страница WebGPU в BrowserScan называет отчёт адаптера и сводку отчёта; страница BrowserLeaks называет обнаружение поддержки и отпечаток, то есть чтения со стороны страницы. Для client hints BrowserLeaks разделяет JavaScript API и HTTP-заголовки, а BrowserScan перечисляет агент пользователя и поддержку API. Сравнивать два сайта по имени маршрута значит сравнивать разные измерения.

Это практическое следствие общего словаря без общего определения. Тест под именем canvas на одном сайте и canvas на другом не устанавливает одно и то же, и отчёт, который ссылается на «тест canvas», не называя набор, оставляет читателя без понимания, какое из двух измерений сделано.

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

Что может подтвердить чистый отчёт набора

Проба сообщает wire=7 для одного каталога и wire=4 для другого, поэтому 11 из 49 опубликованных записей доходят до соединения на эту дату.

wire:BrowserLeaks/ip -> sections=5 IPv6 Leak Test | DNS Leak Test | TCP/IP Fingerprint | TLS Fingerprint
wire:BrowserLeaks/proxy -> sections=1 Proxy Detection
wire:BrowserLeaks/dns -> sections=1 DNS Leak Test
wire:BrowserScan/dns-leak -> sections=4 Introduction to DNS Leak Test | How DNS leaks happen | How to perform a DNS leak test | How to Fix a DNS Leak

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

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

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

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

Тот же предел действует в обратную сторону. Страница, чьи разделы называют рукопожатие, не становится от этого полным аудитом соединения, потому что разделы это список того, что страница показывает, а не всех полей, которые она просматривает. Что деление действительно устанавливает, так это размер разницы между двумя группами: 11 маршрутов называют соединение и 35 остаются в документе, и эти две группы нельзя читать как одну оценку.

Два маршрута, которые ничего не отдают, показывают предел с другой стороны. Страница настроек и индекс инструментов возвращают 200 с десятками килобайт разметки и без единого заголовка раздела, и страница отзывов делает то же. Ни одна из трёх не является тестом и не является измерением, поэтому прогон сообщает о них как о нечитаемых вместо отнесения к группе. Этот выбор держит знаменатель честным: считать их проверками страницы раздуло бы сторону страницы, а считать проверками соединения раздуло бы сторону с самыми тяжёлыми утверждениями.

Чем три группы различаются по отказам

У трёх групп разные режимы отказа, и знание, из какой группы пришёл результат, говорит читателю, как толковать изменение. Счётчики wire и page меняются независимо, поэтому прогон, сдвинувший одну группу, ничего не говорит о другой.

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

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

Страница без разделов не является измерением. Это страница, и прогон сообщает о ней так. Тот, кто относит её к любой из групп, выбирает ответ, которого страница не дала.

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

Записать чтение набора

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

  1. Дайджест главной страницы, потому что набор, который добавляет или убирает маршрут, меняет каждый счёт на этой странице без всякого изменения браузера.
  2. Блок общих заголовков, потому что шаблон, повторяющий меню как заголовки, завышает каждый счёт по странице, пока его не уберут.
  3. Правило классификации, потому что граница между проверкой страницы и проверкой соединения это решение, и другое правило даёт другое деление.
  4. Маршруты, которые не отдают разделов, потому что страница, которая ничего не говорит в заголовках, не то же самое, что страница, которая ничего не проверяет.

Открытые источники

Практический вывод

Отделяйте в отчёте измеренное в документе от измеренного на соединении, прежде чем считать чистый результат широким. Здешние каталоги публикуют 49 записей, и 11 из них называют величину соединения в своих разделах, поэтому набор, который на главной странице кажется полным, в основном читает то, что сообщает страница. Когда два набора делят имя маршрута, считайте имя ярлыком, а не определением, потому что четыре из пяти общих имён здесь описывают разные измерения на двух сайтах. О том, что одна библиотека делает с сигналами до любого вердикта, читайте группы сигналов CreepJS и их объединение; о правилах, которые страница не может вычислить вовсе, читайте правила сетевого уровня, недоступные странице.

#Обнаружение Ботов#Инвентарь Сигналов#Отпечаток Браузера#Сетевой Уровень#Конфиденциальность

Эта статья входит в руководство: Что такое отпечаток браузера?

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

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