Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумБраузеры и профили

Шрифты в отпечатке: что видно и что менять не надо

hexdump
hexdump
Знаток
сообщений 940
с июн
22 декабря, 17:47первое сообщение

Периодически вижу совет «поставь побольше шрифтов, чтобы отличаться». Совет вредный, объясню почему и заодно покажу, что там вообще видно.

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

function est(font) {
  const s = document.createElement('span');
  s.style.cssText = 'position:absolute;left:-9999px;font-size:72px';
  s.textContent = 'mmmmmmmmmwwwwwww';
  s.style.fontFamily = 'monospace';
  document.body.appendChild(s);
  const w = s.offsetWidth;
  s.style.fontFamily = `'${font}',monospace`;
  const r = s.offsetWidth !== w;
  s.remove();
  return r;
}
console.log(['Arial','Tahoma','Segoe UI','Menlo','Ubuntu'].map(f => f + ':' + est(f)));

Перебирают список в несколько сотен имён, на выходе получается битовая маска.

linuxvsem
linuxvsem
Участник
сообщений 830
с июл
1 мая, 08:04#2

Тут и зарыт ответ на «поставь побольше». Набор шрифтов на свежей Windows одинаковый у миллионов машин, и это самая скучная маска на свете. Скучная значит хорошая.

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

На линуксе беда обратная: базовый набор DejaVu и Liberation виден насквозь, а платформа в профиле заявлена как Windows. Такая пара выдаёт себя сама.

$ fc-list : family | sort -u | wc -l
183

183 семейства при заявленной Windows это готовый повод для вопросов.

hexdump
hexdump
Знаток
сообщений 940
с июн
8 октября, 11:21#3
linuxvsem: скучная значит хорошая

Ровно так. У меня на стенде профиль палился именно парой шрифты плюс платформа, пока не свёл набор к базовому.

Света Панина
Света Панина
Новичок
сообщений 160
с мар, второй сезон
15 марта, 14:38#4

а можно шрифты как-то спрятать? чтобы сайт вообще ничего не намерил

Артём Пчёлкин
Артём Пчёлкин
Ветеран
сообщений 2310
с янв
22 августа, 17:55#5

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

Света Панина, тут важнее другое: список обязан биться с платформой профиля. Segoe UI на маке или Helvetica Neue на Windows заметнее любого редкого шрифта.

linuxvsem
linuxvsem
Участник
сообщений 830
с июл
1 января, 08:12#6

Дополню Артёма: document.fonts.check читают тоже, и отвечает он по своим правилам. Если подмена сделана только на измерении ширины, а через FontFaceSet шрифт виден, расхождение вылезет на первой же проверке.

Влад Терентьев
Влад Терентьев
Участник
сообщений 745
с авг
8 июня, 11:29#7

Из практики: перед работой сверяю маску шрифтов у профиля и у обычной машины с той же платформой. Расхождение больше десятка имён значит профиль пора приводить в порядок.

Считаю тем же перебором, только список беру подлиннее, штук на четыреста имён.

hexdump
hexdump
Знаток
сообщений 940
с июн
15 ноября, 14:46#8

Итог короткий, раз тема почти исчерпана.

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

Света Панина, смысл всей возни в том, чтобы выглядеть скучно.