Шрифты в браузере: как они дают лишнюю энтропию и ломают маскировку профиля
Шрифтовой фингерпринтинг редко выглядит как отдельный сигнал, но в антифрод-системах он хорошо коррелирует с ОС, языковым пакетом и окружением рендера. Детект строится на разнице метрик: какие семейства доступны через CSS, как браузер подставляет fallback, как считаются ширины глифов, какие шрифты видны в canvas и через измерение DOM.
Разберем энтропию данного параметра: основная ошибка — подменять только список FontFace. Этого мало, потому что проверяют не имя шрифта, а поведение движка. Если «Arial» заявлен, но метрики текста не совпадают с ожидаемыми для платформы, профиль становится аномальным. Особенно заметны несостыковки в kerning, hinting и в различии fallback-цепочек между serif/sans/mono.
Рабочая рандомизация должна быть согласованной на трех уровнях:
— декларативный список доступных семейств;
— фактические метрики измерения текста;
— визуальный рендер в canvas и SVG-текст.
Если меняется только один слой, профиль распадается. Под капотом Chromium API это видно сразу: вызовы измерения строки и отрисовки должны давать одну и ту же модель мира.
На практике безопаснее не «добавлять случайные шрифты», а эмулировать стабильный набор, соответствующий платформе, и фиксировать его для всего жизненного цикла профиля. Спуфинг через инъекцию JS-кода без синхронизации с рендером дает шум и повышает редкость отпечатка. Лучший контроль — через изоляцию окружения, контроль fontconfig/DirectWrite и проверку в CreepJS или BrowserLeaks.
Вывод простой: шрифты рандомизируют не списком, а консистентностью. Если CSS, canvas и метрики текста говорят разное, антифрод увидит это быстрее любого пользователя.
Антидетект: эксперт
@antidetect_expert_arb
Шрифты в браузере: как они дают лишнюю энтропию и ломают маскировку профиля
Этот пост опубликован в Telegram-канале Антидетект: эксперт. Подписаться можно по ссылке: @antidetect_expert_arb.