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

Защита MIME-типов и кодеков с BotBrowser

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

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

Браузеры поддерживают разные наборы медиаформатов, MIME-типов и кодеков в зависимости от версии браузера, ОС и оборудования. Эти возможности можно запрашивать без разрешений через API вроде MediaSource.isTypeSupported() и canPlayType(), создавая сигнал отслеживания.

Решение BotBrowser

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

Медиавозможности на основе профиля

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

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

Межсигнальная согласованность

BotBrowser обеспечивает согласованность медиавозможностей с другими сигналами профиля:

  • Поддержка кодеков соответствует операционной системе профиля
  • Флаги аппаратного ускорения согласованы с GPU профиля
  • Поддержка MIME-типов соответствует версии браузера профиля

Реалистичные ответы

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

Верификация

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

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

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

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

const mediaInfo = await page.evaluate(() => {
  const codecs = [
    'video/mp4; codecs="avc1.42E01E"',
    'video/webm; codecs="vp9"',
    'video/mp4; codecs="av01.0.01M.08"',
    'audio/mp4; codecs="mp4a.40.2"',
    'audio/webm; codecs="opus"',
  ];

  const video = document.createElement('video');
  return codecs.map(c => ({
    codec: c,
    isTypeSupported: typeof MediaSource !== 'undefined'
      ? MediaSource.isTypeSupported(c) : null,
    canPlayType: video.canPlayType(c),
  }));
});

console.log('Медиавозможности:', JSON.stringify(mediaInfo, null, 2));

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

  1. Результаты MediaSource.isTypeSupported() соответствуют целевой платформе
  2. Возвращаемые значения canPlayType() соответствуют платформе
  3. Результаты согласованы при перезагрузке страницы

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

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