![]()
Когда браузер выводит на экран строку текста или блок разметки, он вычисляет её размеры с точностью до долей пикселя. Эти дробные значения зависят от связки «шрифтовой движок + видеокарта + драйвер + версия браузера + масштаб экрана» и различаются от машины к машине в четвёртом-пятом знаке после запятой. Сайту достаточно попросить у элемента его геометрию — и он получит набор чисел, который для конкретного устройства почти уникален. Это и есть отпечаток ClientRects, он же субпиксельный рендеринг.
Параметр коварен тем, что его почти никто не закрывает. Антидетекты массово подменяют Canvas, WebGL, аудио — а геометрия элементов идёт как есть, напрямую от рендер-движка. В результате ферма, безупречная по популярным отпечаткам, склеивается в кластер по числам, о существовании которых её владелец не подозревает. Тема продолжает разбор Canvas и WebGL и аппаратного отпечатка.
Что такое субпиксельный рендеринг и откуда берутся дроби
Экран состоит из целых пикселей, но вычисляет браузер в дробных. Когда на странице стоит блок с текстом, его реальная ширина редко равна круглому числу: она складывается из ширин отдельных глифов, межбуквенных интервалов, кернинга и округлений на каждом шаге. Браузер хранит результат с высокой точностью и только на финальном этапе раскладывает по физическим пикселям экрана.
Запросить эту точную геометрию может любой скрипт, без разрешений и без следа в интерфейсе. Возвращаются координаты и размеры прямоугольника, описывающего элемент, — с дробной частью. И вот тут начинается самое интересное: дробная часть различается между машинами, потому что на неё влияет целая цепочка:
- Шрифтовой движок ОС. Разные системы по-разному считают метрики глифов и применяют хинтинг.
- Версия конкретного шрифта. Даже одноимённые начертания разных версий дают разные ширины.
- Видеокарта и драйвер. Влияют на сглаживание и способ растеризации.
- Масштаб интерфейса. Системное масштабирование и зум браузера умножают все величины, меняя дробные хвосты.
- Плотность пикселей экрана. Ретина-дисплеи и обычные мониторы считают по-разному.
- Версия и сборка браузера. Обновление движка может сдвинуть округления.
Canvas отвечает на вопрос «как твоя машина рисует». ClientRects отвечает на вопрос «как твоя машина считает». Второе подделать сложнее, потому что это не картинка, а арифметика всего графического стека.
Таблица: что влияет на геометрию элементов
| Фактор | Как влияет на числа | Часто ли маскируется |
|---|---|---|
| Шрифтовой движок ОС | метрики глифов, хинтинг | почти никогда |
| Версия шрифта | ширины символов в долях пикселя | почти никогда |
| Видеодрайвер | растеризация и сглаживание | редко |
| Масштаб системы и зум | умножает все величины | иногда |
| Плотность пикселей | шаг округления | иногда |
| Версия браузера | алгоритм раскладки | частично, через user-agent |
Почему это опасный сигнал для фермы
Числа совпадают у всех профилей
Профили крутятся на одном сервере, значит одна ОС, один набор шрифтов, один драйвер, один масштаб. Геометрия совпадает с точностью до последнего знака у всех экземпляров. Для антифрода это не «похожие пользователи», а буквально одна машина, представившаяся сотней разных.
Конфликт с заявленным устройством
Профиль говорит, что он мобильный, а геометрия соответствует десктопному рендер-движку с десктопным масштабом. Или заявлена одна ОС, а числа характерны для другой. Это тот же класс противоречий, что мы разбирали в материале про рассинхрон таймзоны и языка, но проверяется ещё жёстче — потому что подделать арифметику движка сложнее, чем строку user-agent.
Неправдоподобные значения после «защиты»
Некоторые инструменты добавляют шум к геометрии. Если шум грубый, числа выходят за пределы физически возможных: ширина строки не может отличаться от расчётной на заметную величину, иначе вёрстка поехала бы визуально. Слишком «шумный» профиль выделяется сильнее, чем незащищённый.
Нестабильность между визитами
Ещё хуже, когда шум пересчитывается на каждой загрузке: один и тот же профиль в понедельник и во вторник даёт разную геометрию при одинаковом окружении. У реального устройства числа стабильны месяцами — меняются только при обновлении браузера, смене масштаба или драйвера.
Таблица: живое устройство против фермы
| Признак | Реальный пользователь | Небрежная ферма |
|---|---|---|
| Совпадение чисел | редкое, у похожих конфигураций | полное у всех профилей |
| Стабильность во времени | месяцами одинаковые | скачут при каждой загрузке |
| Соответствие устройству | полное | десктопная геометрия на «мобильном» |
| Величина отклонений | в пределах физики рендеринга | грубый шум за пределами нормы |
| Связь с масштабом | согласована с разрешением | масштаб один на всю ферму |
| Реакция на зум | числа меняются предсказуемо | шум ломает зависимость |
Как закрывать ClientRects правильно
Тонкий шум вместо грубого
Отклонения должны лежать в тех же порядках, что естественный разброс между реальными машинами, — то есть затрагивать младшие знаки дробной части, а не целые пиксели. Визуально вёрстка при этом не должна меняться вообще. Если после «защиты» страница поехала — шум слишком груб, и это видно не только вам.
Шум привязан к профилю, а не к сессии
Ключевое правило, общее для всех отпечатков: смещение генерируется один раз из идентификатора профиля и остаётся неизменным всю его жизнь. Один профиль — одна геометрия навсегда. Именно это отличает грамотную маскировку от «рандома на каждой загрузке», и та же логика описана в материале про изоляцию профилей.
Согласованность со всем остальным стеком
Геометрия обязана биться с заявленной платформой, разрешением экрана, плотностью пикселей и набором шрифтов. Если профиль представляется мобильным, числа должны соответствовать мобильному рендерингу с мобильным масштабом. Проверять нужно связку целиком, а не параметр в отдельности.
Разные конфигурации внутри пула
Даже с идеальным шумом ферма на одном сервере остаётся однородной по базовым условиям. Разнообразие даёт реальный разброс: разные масштабы интерфейса, разные разрешения, разные версии браузера, а в идеале — ядро из физических устройств, где геометрия различается естественно.
Не забывать про зум
Масштаб страницы умножает все величины. Если у всей фермы масштаб ровно стопроцентный, это дополнительный признак однородности: в живой аудитории заметная доля людей сидит с увеличенным масштабом — на больших мониторах и у тех, кому мелко.
Зум страницы — отдельный слой сигнала
Масштаб страницы влияет не только на размеры, но и на способ округления. При нестандартном зуме браузер пересчитывает всю раскладку, и дробные хвосты меняются предсказуемым образом — антифрод умеет это проверять. Профиль, у которого геометрия не реагирует на изменение масштаба так, как должна по физике движка, выдаёт вмешательство в параметр. Поэтому шум нельзя накладывать «поверх итога»: он должен вписываться в логику пересчёта, иначе создаёт противоречие там, где раньше его не было.
Разные элементы должны быть согласованы между собой
Ещё одна тонкость, на которой горят самодельные решения: геометрия соседних элементов связана арифметически. Ширина контейнера складывается из ширин детей, отступов и границ. Если шум накладывается на каждый элемент независимо, сумма перестаёт сходиться — родитель оказывается уже суммы потомков или шире её на величину, которой взяться неоткуда. Реальный движок такого не допускает никогда. Проверить это можно простым тестом: вывести на страницу вложенные блоки и сравнить арифметику. Грамотная маскировка накладывает согласованное смещение на весь расчёт, а не на каждое измерение по отдельности.
Чек-лист проверки
- Откройте фингерпринт-тест, показывающий отпечаток геометрии, на двух-трёх профилях. Значения обязаны различаться.
- Перезагрузите один и тот же профиль трижды: числа должны совпасть до последнего знака.
- Вернитесь к нему через сутки — снова те же значения.
- Визуально сверьте вёрстку тестовой страницы: ничего не должно съезжать.
- Проверьте согласованность с платформой: мобильный профиль не должен давать десктопную геометрию.
- Убедитесь, что в пуле есть профили с разным масштабом интерфейса.
Разбор кейса: ферма, которая палилась дробями
Проект в конкурентной тематике, накрутка велась полгода. Прокси мобильные, антидетект из верхнего ценового сегмента, поведение проработано детально — глубина просмотра, паузы, возвраты. Canvas, WebGL и аудио уникальны у каждого профиля. При этом эффект от накрутки постепенно затухал, хотя ничего в схеме не менялось.
Проверка отпечатков по расширенному списку показала: геометрия элементов идентична у всех профилей вплоть до младшего знака. Антидетект просто не имел настройки для этого параметра — считалось, что он второстепенный. Все двести «разных людей» отдавали ровно одинаковую арифметику рендеринга, потому что физически работали на одной машине с одной ОС и одним масштабом.
После перехода на инструмент с поддержкой профильного шума по геометрии и внедрения разных масштабов интерфейса в пуле эффективность восстановилась в течение нескольких недель. Вывод повторяет главный тезис цикла: антифрод ищет самый редко маскируемый параметр, а не самый известный.
Частые ошибки
- Считать параметр второстепенным. Именно из-за этого он и работает так хорошо для детекта.
- Грубый шум. Ломает вёрстку и выдаёт себя сильнее, чем отсутствие защиты.
- Шум на каждую сессию. Нестабильная геометрия — прямой признак генерации на лету.
- Игнорировать масштаб. Стопроцентный зум у всей фермы — отдельный маркер однородности.
- Проверять параметр в отрыве от остальных. Уникальная геометрия при десктопных числах на мобильном профиле хуже, чем совпадающая.
Частые вопросы
Можно ли вообще запретить сайту читать геометрию? Нет. Это базовая функция, без которой не работает половина интерфейсов в интернете — адаптивная вёрстка, выпадающие меню, позиционирование подсказок. Блокировка сломает сайты и сама станет ярким сигналом.
Насколько этот отпечаток информативнее Canvas? По объёму энтропии — сопоставим. По практической опасности сегодня выше: Canvas закрывают почти все антидетекты, геометрию — единицы. Ценность сигнала определяется частотой маскировки.
Реальные устройства решают проблему полностью? Да, это самый надёжный путь: разные физические машины дают естественно разную геометрию, подделывать ничего не нужно. Минус — стоимость и масштабируемость, поэтому на практике работает гибридная схема с ядром на реальных устройствах.
Как понять, что мой антидетект это умеет? Проще всего эмпирически: запустите два профиля, сравните отпечаток геометрии в тесте. Различаются — умеет. Совпадают — не умеет, независимо от того, что написано в описании.
Вывод
Субпиксельная геометрия элементов — отпечаток, который браузер отдаёт любому скрипту без разрешений и который складывается из арифметики всего графического стека: шрифтового движка, версии шрифтов, драйвера, масштаба и плотности пикселей. Для фермы на одном сервере эти числа совпадают идеально у всех профилей, что делает параметр одним из самых эффективных инструментов кластеризации — именно потому, что его почти никто не закрывает. Правильная работа: тонкий шум в младших знаках, жёстко привязанный к профилю и неизменный во времени, согласованность с платформой и разрешением, разные масштабы интерфейса в пуле и реальные устройства в ядре. Проверка занимает десять минут, а без неё вся остальная маскировка может оказаться бессмысленной.
Больше о поведенческом продвижении и других услугах — на главной странице ProfSEO24.
Закажите накрутку ПФ в ProfSEO24
Выводим сайты в ТОП-1 Яндекса за счёт поведенческих факторов на базе ИИ — без риска фильтров. Более 300 сайтов в ТОП-1, первые сдвиги по позициям за 3 дня. Рассчитаем стоимость под вашу нишу и регион.
Заказать накрутку ПФ Написать в TelegramКомментарии
Павел Ситников
Проверил на своём пуле — геометрия совпадает у всех профилей до последнего знака. Антидетект вообще не имеет такой настройки, хотя в описании написано про «полную защиту отпечатков».
Admin
«Полная защита» в маркетинге почти всегда означает Canvas, WebGL и аудио. Геометрию поддерживают единицы. Ориентируйтесь не на описание, а на результат теста: запустили два профиля, сравнили числа — вот и весь ответ.
Елена Буянова
Про согласованность вложенных блоков — сильный момент. Никогда бы не подумала, что шум может ломать арифметику разметки.
devops_niko
Вопрос: если поставить разные версии браузера на профили, это решит проблему хотя бы частично?
Admin
Частично да — разные сборки движка дают разные округления. Но это грубое деление: профилей у вас сотни, а версий браузера в живом обороте единицы. Внутри одной версии всё снова совпадёт. Работает как дополнение к профильному шуму, а не вместо него.
Тимур Асланов
Про масштаб интерфейса не думал вообще. У меня везде стандартный, то есть ещё один общий признак на всю ферму. Спасибо, буду разводить.
Ксения Радова
А как понять, что шум «слишком грубый»? Есть какой-то визуальный тест?
Admin
Самый простой: откройте пару сложных вёрсткой сайтов и посмотрите глазами. Если поехали колонки, наползают подписи на кнопках, съезжают таблицы — шум затрагивает целые пиксели, это уже перебор. Нормальная маскировка визуально не отличается от её отсутствия.
Алексей Гринёв
Кейс один в один наш. Полгода крутили, эффект затухал, искали проблему в прокси и в поведении. Оказалось — в арифметике рендеринга.
Марат Юсупов
Получается, самый надёжный вариант — реальные устройства, где ничего подделывать не надо. Но масштабировать дорого.
Admin
Именно поэтому на практике работает гибрид: ядро на реальных устройствах закрывает самые сложные параметры, эмулированные профили добирают объём. Полностью на живом железе выходит дорого, полностью на эмуляции — ненадёжно.
Вероника Шпак
Проверила стабильность: перезагрузила профиль три раза, числа одинаковые. Через сутки тоже. Хоть тут порядок.
front_end_rus
Как верстальщик подтверждаю: дробные размеры блоков — обычное дело, и они действительно зависят от машины. На разных мониторах одна и та же вёрстка даёт разные числа.
Станислав Ерёмин
Смущает, что параметр нельзя отключить в принципе. То есть сайт всегда что-то про тебя узнает, вопрос только в правдоподобности ответа.
Лариса Дёмина
Подскажите, стоит ли разводить разрешения экрана внутри пула или достаточно масштаба?
Admin
Разводите и то, и другое, они влияют по-разному. Только не берите экзотические разрешения ради разнообразия — ориентируйтесь на реально популярные, иначе получите уникальность не того сорта: профиль станет заметным сам по себе.
Никита Ворошилов
Тезис про «самый редко маскируемый параметр» стоит повесить на стену. По сути, вся гонка именно об этом.
Оксана Лебедь
Прошла чек-лист, нашла две проблемы из шести пунктов. Хорошо, что проверка занимает вечер, а не неделю.
Геннадий Пахомов
Работаем с ProfSEO24 не первый месяц, такие тонкости учитываются без напоминаний с моей стороны. Это, пожалуй, главное, за что плачу.