指纹
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));
关键检查项:
MediaSource.isTypeSupported()结果与目标平台匹配canPlayType()返回值适合平台- 结果在页面刷新后一致
快速开始
- 从 GitHub 下载 BotBrowser
- 使用
--bot-profile加载指纹配置文件 - 媒体能力保护由配置文件自动管理
- 验证编解码器支持与配置文件的目标平台匹配
#mime#codec#media#fingerprinting#privacy