Шрифты выдают профиль браузера даже тогда, когда Canvas уже зашумлён
Шрифтовой фингерпринтинг опирается не только на список установленных гарнитур. Детект измеряет метрики рендера: ширину глифов, переносы, кернинг, fallback-цепочки, поведение font-smoothing и различия между системами рендеринга. Разница в одном символе иногда меняет весь отпечаток.
Типовая ошибка — пытаться “спуфить” только navigator.fonts или подменять имя шрифта. Этого мало: сайт может прогнать текст через скрытый DOM, сравнить layout-rects, вызвать document.fonts.check() и сопоставить результат с профилем ОС. Под капотом Chromium API здесь важен не список, а то, как движок реально строит шрифтовой стек.
Рандомизация должна быть согласованной:
— сохраняйте один и тот же набор метрик внутри сессии;
— не смешивайте несовместимые семейства: это ломает fallback;
— эмулируйте не только наличие шрифта, но и его рендер-поведение;
— не трогайте все параметры сразу: резкий шум проще отличить от реального профиля.
Лучший подход — профильная имитация, а не хаотичный спуфинг через инъекцию JS-кода. Если меняется только перечень шрифтов, а ширина текста, межсимвольные интервалы и поведение сглаживания остаются “нативными”, отпечаток всё равно собирается. Разберем энтропию данного параметра: она живет в согласованности, а не в количестве подмен.
Итог простой: рандомизируйте шрифты как систему, а не как строку в объекте. Иначе детект на уровне сетевого стека и браузерной телеметрии быстро увидит искусственный профиль.
Антидетект: эксперт
@antidetect_expert_arb
Шрифты выдают профиль браузера даже тогда, когда Canvas уже зашумлён
Этот пост опубликован в Telegram-канале Антидетект: эксперт. Подписаться можно по ссылке: @antidetect_expert_arb.