Защита 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));
Ключевые проверки:
- Доступность Widevine соответствует платформе профиля
- Уровни робастности согласованы между headless и оконным режимами
- Разные профили производят различные, соответствующие платформе ответы
Начало работы
- Скачайте BotBrowser с GitHub
- Загрузите профиль с помощью
--bot-profileдля применения защиты DRM-сигналов - Проверьте, что ответы EME соответствуют целевой платформе профиля
- См. документацию для деталей конфигурации профилей