Назад к блогу
Отпечатки

Защита шрифтовых отпечатков с BotBrowser

Как BotBrowser контролирует списки шрифтов и метрики текста на уровне движка браузера для согласованных шрифтовых сигналов между платформами.

Риск для конфиденциальности

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

Решение BotBrowser

BotBrowser контролирует шрифтовые сигналы на уровне движка браузера, а не через инъекцию JavaScript или блокировку API.

Списки шрифтов, согласованные с платформой

Когда профиль нацелен на определенную платформу, BotBrowser сообщает соответствующие шрифты независимо от ОС хоста:

chrome --bot-profile="/path/to/windows-profile.enc" \
       --user-data-dir="$(mktemp -d)"

Запросы перечисления шрифтов возвращают правильный набор шрифтов для целевой платформы.

Согласование метрик шрифтов

API измерения текста возвращают метрики, согласованные с движком рендеринга шрифтов целевой платформы:

  • Результаты measureText()
  • Размеры смещения элементов с определенными шрифтами
  • Измерения ограничивающего прямоугольника шрифтов

Блокировка не требуется

В отличие от расширений, блокирующих доступ к шрифтам (что само по себе обнаруживаемо), BotBrowser позволяет нормальное использование API шрифтов, контролируя результаты. Сайты работают нормально, но сигналы соответствуют профилю.

Верификация

После загрузки профиля проверьте согласованность шрифтов:

const { chromium } = require('playwright-core');

const browser = await chromium.launch({
  executablePath: '/path/to/botbrowser/chrome',
  args: [
    '--bot-profile=/path/to/windows-profile.enc',
  ],
  headless: true,
});

const page = await (await browser.newContext()).newPage();

const fontCheck = await page.evaluate(() => {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  ctx.font = '72px monospace';
  const fallbackWidth = ctx.measureText('mmmmm').width;

  ctx.font = '72px Arial, monospace';
  const arialWidth = ctx.measureText('mmmmm').width;

  return {
    arialAvailable: arialWidth !== fallbackWidth,
    arialWidth,
    fallbackWidth,
  };
});

console.log('Проверка шрифтов:', fontCheck);

Ключевые проверки:

  1. Доступность шрифтов соответствует целевой платформе
  2. Метрики текста не раскрывают реальную ОС хоста
  3. Нет предупреждений "font access blocked"

Начало работы

  1. Скачайте BotBrowser с GitHub
  2. Загрузите профиль, соответствующий желаемой платформе, с помощью --bot-profile
  3. Протестируйте согласованность шрифтов с помощью инструментов тестирования отпечатков
  4. Прочитайте руководство по шрифтам для подробностей
#fonts#fingerprinting#privacy#text-metrics#tracking