Фингерпринтинг MIME и кодеков: отслеживание медиа
Как MediaCapabilities, canPlayType и запросы поддержки кодеков создают уникальные отпечатки, и методы контроля идентичности медиаформатов.
Нужна поддерживаемая продуктовая документация?
У этой статьи есть соответствующая страница в центре документации. Используйте docs для каноничного сценария настройки, актуальных флагов и долгосрочной справки.
Введение
Современные браузеры поддерживают широкий спектр медиаформатов, от устоявшихся стандартов вроде H.264 и AAC до более новых кодеков, таких как AV1, VP9 и Opus. Веб-разработчикам нужно знать, какие форматы может воспроизводить браузер, поэтому платформа предоставляет несколько API для запроса медиавозможностей. Эти API помогают веб-сайтам подавать правильный формат видео и аудио каждому посетителю, обеспечивая оптимальное качество воспроизведения и производительность.
Однако поддержка кодеков существенно различается между браузерами, версиями операционных систем и аппаратными конфигурациями. Браузер на Windows с аппаратным декодированием видео сообщает о других возможностях, чем та же версия браузера на Linux без аппаратного ускорения. Эти различия создают стабильный, запрашиваемый отпечаток, который не требует разрешений и не создает видимых для пользователя индикаторов. Любой веб-сайт может перечислить поддержку кодеков за миллисекунды, создавая детальный профиль медиавозможностей вашего устройства без вашего ведома или согласия.
Вот почему снятие отпечатков по медиаформатам является серьезной проблемой конфиденциальности, и почему BotBrowser обеспечивает комплексную защиту на уровне движка.
Влияние на конфиденциальность
Снятие отпечатков по медиавозможностям особенно эффективно, потому что ландшафт кодеков сильно фрагментирован. В отличие от более простых сигналов отпечатка, которые дают лишь несколько различных значений, поддержка кодеков создает матрицу из сотен потенциальных комбинаций. Эта высокая энтропия делает её одной из наиболее мощных доступных техник снятия отпечатков.
Рассмотрим масштаб вариаций между платформами:
- Аппаратное декодирование видео зависит от версии браузера, модели GPU и операционной системы. Наличие аппаратного ускорения для конкретных кодеков раскрывает детальную информацию об оборудовании вашей системы.
- Платформенно-специфичные кодеки доступны на некоторых операционных системах, но не на других. Определенные кодеки предоставляются через нативный медиафреймворк ОС, что делает их прямым индикатором вашей платформы.
- Премиум-кодеки (такие как Dolby Vision и Dolby Atmos) доступны только на определенных комбинациях оборудования и ОС, что дополнительно сужает идентичность вашего устройства.
- Комбинации контейнеров и кодеков дают разные уровни поддержки в зависимости от браузера и платформы, создавая дополнительные точки данных для снятия отпечатков.
- Поддержка аудиокодеков варьируется между платформами тонкими способами, которые добавляются к общему отпечатку, хотя большинство современных браузеров имеют общую базовую линию.
Комбинация ответов по десяткам типичных запросов медиаформатов создает высокоотличительный профиль. Когда используются более продвинутые запросы возможностей, раскрывается дополнительная информация об аппаратном ускорении, энергоэффективности и плавности воспроизведения, что еще больше увеличивает уникальность отпечатка.
Анализ 2022 года топ-10000 сайтов Alexa показал, что более 15% запрашивали медиавозможности в рамках своих скриптов снятия отпечатков. Запросы быстры, не требуют разрешений и неотличимы от законного обнаружения функций для воспроизведения медиа. Это делает их трудными для блокировки без нарушения работы веб-сайтов.
Почему это важно для вашей конфиденциальности
Ваше оборудование раскрыто
Каждый запрос медиавозможностей раскрывает что-то о вашем оборудовании. Поддерживает ли ваш GPU аппаратное декодирование для конкретного формата, какие кодеки нативно предоставляет ваша ОС и какой уровень производительности может достичь ваше устройство для различных типов медиа. Вся эта информация раскрывается молча, без какого-либо уведомления или запроса согласия.
Постоянная идентификация
В отличие от cookies, которые можно очистить, ваш профиль поддержки кодеков привязан к вашему оборудованию и ОС. Он остается одинаковым между сессиями просмотра, в режиме инкогнито и даже после очистки всех данных браузера. Эта постоянность делает снятие отпечатков по кодекам особенно ценным для целей отслеживания.
Межсайтовое отслеживание
Поскольку ваш профиль кодеков одинаков на каждом посещаемом веб-сайте, он может использоваться как связующий идентификатор. Два разных веб-сайта, оба запрашивающие ваши медиавозможности, получат одинаковые ответы, что позволяет им связывать ваши визиты даже без общих cookies или информации для входа.
Отсутствие уведомления пользователя
Нет визуального индикатора, когда веб-сайт запрашивает ваши медиавозможности. Не появляется диалог разрешений. Не отображается значок в адресной строке. Пользователи не имеют возможности узнать, что их профиль кодеков собирается, и нет настройки браузера для его предотвращения.
Распространенные подходы к защите и их ограничения
VPN и прокси-серверы
VPN не влияют на запросы поддержки кодеков. Обнаружение медиавозможностей происходит полностью внутри браузера и не включает сетевые запросы. Два устройства за одним VPN сообщают совершенно разные профили кодеков на основе их локального оборудования и ПО. VPN защищают ваш IP-адрес, но оставляют ваш медиаотпечаток полностью открытым.
Инкогнито и приватный просмотр
Режимы приватного просмотра не изменяют поддержку кодеков. Те же ответы возвращаются в инкогнито, как и в обычном окне, потому что поддержка кодеков определяется бинарным файлом браузера и конфигурацией ОС, а не сохраненными данными. Режим инкогнито предназначен для предотвращения сохранения cookies и истории, а не для изменения фундаментальных возможностей вашего устройства.
Расширения браузера
Расширения, пытающиеся изменить ответы о медиавозможностях, сталкиваются с рядом фундаментальных проблем:
- Согласованность между API: Браузер раскрывает информацию о кодеках через несколько различных интерфейсов. Изменение одного без изменения остальных создает обнаруживаемые несоответствия, которые на самом деле хуже для вашей конфиденциальности, чем исходный отпечаток.
- Функциональное влияние: Некорректное сообщение о неподдержке кодека, который на самом деле доступен, может нарушить воспроизведение видео и аудио. Сообщение о поддержке кодека, который не поддерживается, вызывает ошибки воспроизведения. В обоих случаях пользовательский опыт страдает.
- Поверхность обнаружения: Переопределение нативных методов браузера на уровне JavaScript изменяет их внутренние свойства и может быть обнаружено через техники инспекции.
- Ограничения области действия: Расширения обычно не могут перехватывать запросы возможностей из Web Workers или service workers, оставляя эти контексты с незащищенной информацией.
Рандомизация
Случайное изменение ответов о кодеках непрактично. В отличие от снятия отпечатков по canvas или аудио, где возможны небольшие шумовые возмущения, поддержка кодеков является фундаментально бинарной: формат либо поддерживается, либо нет. Случайные ответы нарушат воспроизведение медиа и создадут очевидно невалидные комбинации, которые привлекут больше внимания, чем оригинальный отпечаток.
Подход BotBrowser на уровне движка
BotBrowser контролирует ответы о медиавозможностях на уровне движка браузера, обеспечивая, чтобы все API, связанные с кодеками, возвращали результаты, согласованные с загруженным профилем отпечатков. Это не JavaScript-патч и не расширение браузера. BotBrowser модифицирует внутренний механизм сообщения о медиавозможностях браузера, так что каждый API возвращает аутентичные, согласованные с профилем результаты.
Медиавозможности на основе профиля
Когда загружается профиль отпечатков, BotBrowser настраивает полную матрицу поддержки кодеков для соответствия целевой платформе профиля:
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Профиль определяет полный набор ответов о кодеках, захваченных с реального устройства, соответствующего конфигурации профиля. Это включает:
- Корректные уровни поддержки для каждой комбинации медиаформата и кодека
- Соответствующие флаги аппаратного ускорения
- Платформенно-точные индикаторы энергоэффективности и плавности воспроизведения
- Согласованные ответы между всеми API медиавозможностей
Каждый ответ соответствует тому, что сообщило бы реальное устройство с профилированной конфигурацией. Нет пробелов, нет несоответствий и нет сигналов, которые могли бы указать на модификацию ответов.
Межпротокольная согласованность
BotBrowser обеспечивает согласованность всех API, связанных с кодеками. Если один API сообщает о поддержке данного формата, другие API также сообщают о согласованной поддержке с соответствующими деталями. Эта межпротокольная согласованность критична, потому что скрипты снятия отпечатков регулярно запрашивают несколько API и сравнивают результаты для обнаружения несоответствий.
Платформенно-точные ответы
Профиль Windows сообщает о кодеках, специфичных для Windows (включая те, которые предоставляются через нативный медиафреймворк платформы), в то время как профиль Linux опускает платформенные кодеки, недоступные на Linux. Это выравнивание распространяется на аппаратное ускорение: профиль, нацеленный на систему с определенным GPU, сообщает о возможностях аппаратного декодирования, соответствующих поддержке декодера этого GPU.
Эта платформенная точность отличает BotBrowser от поверхностных подходов. Каждая деталь профиля медиавозможностей соответствует реальной, когерентной конфигурации оборудования и ПО.
Отсутствие функционального влияния
Поскольку BotBrowser контролирует отчеты о кодеках на уровне движка, а не блокирует вызовы API, воспроизведение медиа продолжает работать нормально. Веб-сайты, использующие запросы кодеков для законного выбора формата, получают соответствующую информацию о том, что может воспроизводить браузер. Ваша конфиденциальность защищена без жертвования функциональностью.
Настройка и использование
Базовое использование через CLI
Защита кодеков автоматическая при загрузке профиля:
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Интеграция с Playwright
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
],
headless: true,
});
const context = await browser.newContext({ viewport: null });
const page = await context.newPage();
// Переход для проверки согласованности сигналов кодеков
await page.goto('https://example.com');
// Проверка активности защиты кодеков
const codecInfo = await page.evaluate(() => {
const video = document.createElement('video');
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"',
];
return codecs.map(c => ({
codec: c,
supported: video.canPlayType(c),
}));
});
console.log('Codec support:', JSON.stringify(codecInfo, null, 2));
await browser.close();
})();
Интеграция с Puppeteer
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
],
headless: true,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('about:blank');
// Проверка соответствия медиавозможностей профилю
const capabilities = await page.evaluate(async () => {
const result = await navigator.mediaCapabilities.decodingInfo({
type: 'file',
video: {
contentType: 'video/mp4; codecs="avc1.640028"',
width: 1920, height: 1080, bitrate: 5000000, framerate: 30,
},
});
return {
supported: result.supported,
smooth: result.smooth,
powerEfficient: result.powerEfficient,
};
});
console.log('Media capabilities:', capabilities);
await browser.close();
})();
Проверка
После запуска BotBrowser с профилем убедитесь, что защита медиавозможностей работает корректно:
- Уровни поддержки соответствуют ожидаемым значениям для целевой платформы профиля. Каждый кодек должен возвращать ответ, который произвело бы реальное устройство с профилированной конфигурацией.
- Межпротокольная согласованность поддерживается. Все API медиавозможностей должны согласовываться друг с другом. Если один сообщает о поддержке формата, остальные должны быть согласованы.
- Платформенно-специфичные кодеки соответствуют ОС профиля. Кодеки, доступные только на определенных платформах, должны присутствовать или отсутствовать в соответствии с профилем.
- Результаты стабильны между перезагрузками страниц и перезапусками браузера. Ваш отпечаток медиавозможностей должен быть воспроизводимым и согласованным каждый раз.
- Инструменты тестирования отпечатков не сообщают об аномалиях в обнаружении медиавозможностей. Вы можете использовать популярные веб-сайты тестирования отпечатков для проверки аутентичности вашего профиля кодеков.
Лучшие практики
-
Используйте полные профили. Поддержка кодеков тесно связана с ОС, версией браузера и GPU. Полный профиль обеспечивает согласованность всех трех измерений. Профили BotBrowser захватываются с реальных устройств, поэтому полнота встроена.
-
Выбирайте профиль, соответствующий вашему сценарию использования. Если ваш рабочий процесс включает сайты с большим количеством медиа, выберите профиль, поддерживающий кодеки, которые ожидают эти сайты. Профиль без определенных кодеков может вызвать снижение качества на некоторых стриминговых сайтах. BotBrowser предлагает профили для различных платформенных конфигураций.
-
Проверяйте межпротокольную согласованность. Всегда подтверждайте, что несколько API медиавозможностей согласованы друг с другом. Скрипты снятия отпечатков сравнивают результаты между API, поэтому согласованность необходима. BotBrowser обрабатывает это автоматически, но проверка дает вам уверенность.
-
Не устанавливайте дополнительные расширения для кодеков. Расширения браузера, добавляющие поддержку кодеков (такие как h265ify), могут изменить профиль кодеков и конфликтовать с контролем BotBrowser на уровне движка. Позвольте профилю полностью управлять отчетами о кодеках.
-
Сочетайте с защитой сигналов DRM. Возможности медиакодеков и возможности DRM-кодеков должны рассказывать согласованную историю. Использование единого профиля BotBrowser обеспечивает согласованность обоих. См. статью Защита сигналов DRM для подробностей.
Часто задаваемые вопросы
Работает ли снятие отпечатков по кодекам во всех браузерах?
Да. Все основные браузеры реализуют API медиавозможностей. Запросы работают согласованно на всех платформах, поэтому снятие отпечатков по кодекам является такой широко используемой техникой. BotBrowser защищает от этих запросов независимо от целевого браузера профиля.
Сколько различных отпечатков кодеков существует?
Число очень велико. С десятками часто запрашиваемых строк кодеков, каждая возвращающая несколько возможных значений, теоретическое пространство комбинаций огромно. На практике реальные устройства группируются в несколько сотен типичных конфигураций, но отпечаток все равно высокоотличителен. Профили BotBrowser соответствуют реальным конфигурациям устройств, обеспечивая попадание вашего отпечатка в нормальное распределение.
Изменяется ли поддержка кодеков между версиями браузера?
Да. Новые версии браузера добавляют поддержку новых кодеков и иногда отменяют старые. Профили BotBrowser версионированы для соответствия конкретным релизам браузера, так что ваш профиль кодеков всегда соответствует валидной, реальной конфигурации.
Могут ли веб-сайты обнаружить, что ответы о кодеках контролируются?
Если контроль применяется на уровне JavaScript (переопределение нативных методов), он может быть обнаружен. BotBrowser применяет контроль на уровне движка, так что сами нативные методы возвращают согласованные с профилем значения. Нет JavaScript-переопределений для обнаружения. Защита невидима для веб-сайта.
Влияет ли это на реальное воспроизведение видео?
Отчеты о кодеках BotBrowser спроектированы для согласованности с возможностями воспроизведения браузера под загруженным профилем. Веб-сайты, использующие запросы кодеков для выбора формата, получают соответствующие ответы, и воспроизведение медиа работает нормально. Вы получаете защиту конфиденциальности без ущерба для вашего опыта просмотра.
А как насчет запросов кодеков зашифрованных медиа (EME)?
Запросы кодеков EME (используемые для DRM-защищенного контента) также контролируются профилем. См. статью Защита сигналов DRM для подробностей о защите, специфичной для EME. BotBrowser обеспечивает согласованность как общих, так и DRM-специфичных запросов кодеков.
Как это взаимодействует с согласованием кодеков WebRTC?
WebRTC использует отдельное согласование кодеков через SDP (Session Description Protocol). Профили BotBrowser контролируют как запросы кодеков веб-медиа, так и сигналы кодеков, связанные с WebRTC, для комплексной согласованности. Ваш медиаотпечаток защищен во всех контекстах.
Итоги
Запросы поддержки MIME-типов и кодеков представляют собой высокоэнтропийную поверхность снятия отпечатков, которая раскрывает детали ОС, оборудования и конфигурации браузера. Эти запросы выполняются молча, не требуют разрешений и дают стабильные результаты, сохраняющиеся между сессиями. BotBrowser контролирует все API медиавозможностей на уровне движка через свою систему профилей, обеспечивая согласованные, межпротокольно-точные ответы, соответствующие целевой платформе. Ваш отпечаток кодеков аутентичен, стабилен и неотличим от реального устройства. В сочетании с защитой сигналов DRM, контролем аудиоотпечатка и комплексным управлением профилями, BotBrowser обеспечивает тщательную защиту медиаотпечатка.
Похожие статьи
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.