指纹
BotBrowser 栈深度控制:一致的递归限制
BotBrowser 如何通过 --bot-stack-seed 标志控制 JavaScript 递归深度,实现跨平台一致性。
隐私风险
JavaScript 递归深度因浏览器引擎、操作系统和 CPU 架构而异。这种差异可以作为追踪信号。BotBrowser 通过 --bot-stack-seed 标志在引擎层面控制栈深度。
--bot-stack-seed 标志
BotBrowser 提供三种栈深度控制模式:
# 使用指纹配置文件中的值(推荐)
chrome --bot-profile="/path/to/profile.enc" \
--bot-stack-seed=profile
# 使用宿主的自然栈限制
chrome --bot-profile="/path/to/profile.enc" \
--bot-stack-seed=real
# 设置特定的自定义深度
chrome --bot-profile="/path/to/profile.enc" \
--bot-stack-seed=12500
设置为 profile 时,栈深度匹配配置文件采集自真实设备时记录的值。这是跨平台一致性的推荐设置。
引擎级控制
修改发生在浏览器引擎内部,在任何 JavaScript 执行之前。它影响所有执行上下文:主线程、Web Workers 和 iframe。栈溢出在配置的深度自然发生。
与其他确定性标志结合
栈深度控制作为完整确定性配置的一部分效果最好:
chrome --bot-profile="/path/to/profile.enc" \
--bot-stack-seed=profile \
--bot-noise-seed=42 \
--bot-time-scale=1.0 \
--user-data-dir="$(mktemp -d)"
验证
使用 Playwright 验证栈深度一致性:
const { chromium } = require('playwright-core');
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-stack-seed=profile',
],
headless: true,
});
const page = await (await browser.newContext()).newPage();
const depth = await page.evaluate(() => {
let d = 0;
function r() { d++; r(); }
try { r(); } catch (e) { return d; }
});
console.log('Stack depth:', depth);
await browser.close();
在不同机器上使用相同配置文件运行,报告的深度应该一致。
开始使用
#stack-depth#javascript#recursion#fingerprinting#privacy