返回博客
指纹

BotBrowser MIME 类型与编解码器保护

BotBrowser 如何通过指纹配置文件控制媒体能力响应,实现一致的编解码器和 MIME 类型信号。

隐私风险

浏览器根据版本、操作系统和硬件支持不同的媒体格式、MIME 类型和编解码器。这些能力可通过 MediaSource.isTypeSupported()canPlayType() 等 API 无需权限即可查询,构成追踪信号。

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. GitHub 下载 BotBrowser
  2. 使用 --bot-profile 加载指纹配置文件
  3. 媒体能力保护由配置文件自动管理
  4. 验证编解码器支持与配置文件的目标平台匹配
#mime#codec#media#fingerprinting#privacy