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