1. Что такое ClientRects в фингерпринтинге браузеров
Метод getBoundingClientRect()
возвращает размер элемента и его положение относительно области просмотра. Современные сайты используют это для фингерпринтинга пользователей, анализируя, как API макета JavaScript и расчёты рендеринга браузера ведут себя при различных:
- Настройках DPI / масштабирования
- Различиях в загрузке шрифтов
- Изменениях уровня масштаба
- Движках макета браузера (например, Blink, WebKit, Gecko styles)
Некоторые антифрод-платформы обнаруживают такие закономерности, как:
- Точность масштабирования до субпикселей
- Округление и обработка десятичных значений в позициях макета на основе чисел с плавающей запятой
- Различия в размерах стандартных скрытых контейнеров, используемых для тестирования
Хотя это часто упускают из виду, фингерпринт ClientRects может выдавать поведение масштабирования браузера, которое остается очень стабильным между сеансами — и его крайне сложно скрыть без нарушения функциональности UI, связанной с макетом.
2. Как платформы обнаруживают фингерпринты ClientRects
Антифрод-системы могут фингерпринтить браузеры с помощью:
- Измерения координат невидимых тестовых элементов: Скрывая элементы за пределами экрана или постоянно в макетах, они могут сравнивать ожидаемые и фактические значения rect для выявления подмены.
- Наблюдения за поведением масштабирования при зумировании: Простой, но эффективный метод — системы отслеживают трансформацию вашего браузера и обновления rect во время симулированного “зума” или изменения размера и перепроверяют логику.
- Утечки вычислений с плавающей запятой: Крошечные различия в точности десятичных значений могут идентифицировать внутренний движок макета браузера — например, Chrome вычисляет иначе, чем Safari или Firefox.
- Согласованности CSS-стилей: Некоторые продвинутые системы используют изменения в рефлоу и перерисовке макета, вызванные обновлениями стилей, которые отражаются в данных rect, чтобы выявить несоответствия браузера.
- Проверок округления размера шрифта: Предварительно отрендеренные тестовые элементы с фиксированными размерами шрифта могут раскрыть движки рендеринга шрифтов, которые обычно связаны с ОС, такими как Windows, macOS или Linux/Android.
Если значения рендеринга макета слишком математически “чистые” или не варьируются даже по самым мелким правилам — что FlashID создает в реалистичном паттерне отклонений — антифрод-системы отмечают их как аномалии.
3. Как FlashID маскирует фингерпринты ClientRects
В отличие от платформ, которые подделывают только высокоуровневые значения, FlashID обеспечивает детальный контроль для имитации настоящего поведения масштабирования, гарантируя:
- Видимую согласованность пиксельной математики, но с отключением трассируемости
- Естественные паттерны случайности, имитирующие реальные отклонения рендеринга
Решения FlashID для фингерпринтинга ClientRects включают:
- Подмену ClientRect через динамическое управление элементами: FlashID динамически вставляет и обрабатывает измерения прямоугольников, возвращая кастомные, но правдоподобные значения rect для каждого профиля браузера.
- Настраиваемую точность округления: Точность чисел с плавающей запятой для размеров rect может слегка настраиваться между сеансами — отражая естественное поведение браузера и системы.
- Синхронизацию подмены с модулями CSS/шрифтов и масштабирования: Подмена ClientRects работает совместно с настройками шрифтов, масштаба и стилей, чтобы соответствовать ожидаемому выводу рендеринга.
- Внедрение дельты варьирования: FlashID добавляет искусственные вариации в измерения на основе rect, чтобы предотвратить сопоставление сеансов — но в пределах ожидаемого браузером округления или “шума” макета.
- Обход стандартных проверок скрытых DOM-элементов: Система симулирует и вычисляет все необходимые значения rect, даже для скрытых элементов, обманывая системы обнаружения.
- Дрожание измеряемых элементов: Для каждого профиля применяется небольшое отклонение и дрожание размеров элементов, что придает экземплярам браузера FlashID реалистичный профиль рендеринга.
Такая изоляция поведения гарантирует, что даже на сайтах с углубленным отслеживанием через рефлоу ваш браузер FlashID остаётся несвязанным, неассоциируемым и сложным для отслеживания методами макета.
Рекомендуемое Чтение