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

Защита DRM-сигналов с BotBrowser

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

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

API Encrypted Media Extensions (EME) позволяет веб-сайтам запрашивать поддержку DRM-систем ключей без разрешения пользователя. Ответы раскрывают информацию, специфичную для устройства: поддерживаемые системы ключей, уровни безопасности и возможности кодеков. Эти сигналы варьируются по платформам и не меняются между сессиями.

Решение BotBrowser

BotBrowser управляет DRM-сигналами через систему профилей. При загрузке профиля все ответы EME согласуются с целевой платформой и конфигурацией браузера профиля.

Конфигурация DRM на основе профиля

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

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

Widevine в headless-режиме

Стандартные headless-браузеры часто не имеют поддержки Widevine, что само по себе является сильным сигналом. BotBrowser сохраняет доступность Widevine в headless-режиме, поэтому запросы возможностей DRM возвращают одинаковые результаты с видимым окном и без него.

Кроссплатформенная согласованность

Профиль Windows Chrome, работающий на сервере Linux, сообщает характеристики DRM, соответствующие Windows, включая правильный уровень безопасности, значения робастности и возможности кодеков.

Верификация

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

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 drmInfo = await page.evaluate(async () => {
  const config = [{
    initDataTypes: ['cenc'],
    videoCapabilities: [{
      contentType: 'video/mp4; codecs="avc1.42E01E"',
      robustness: 'SW_SECURE_DECODE'
    }],
  }];

  try {
    const access = await navigator.requestMediaKeySystemAccess(
      'com.widevine.alpha', config
    );
    return { widevine: true, config: access.getConfiguration() };
  } catch {
    return { widevine: false };
  }
});

console.log('DRM-сигналы:', JSON.stringify(drmInfo, null, 2));

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

  1. Доступность Widevine соответствует платформе профиля
  2. Уровни робастности согласованы между headless и оконным режимами
  3. Разные профили производят различные, соответствующие платформе ответы

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

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