返回博客
指纹

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();

在不同机器上使用相同配置文件运行,报告的深度应该一致。

开始使用

  1. GitHub 下载 BotBrowser
  2. 配置文件仓库 选择配置文件
  3. 添加 --bot-stack-seed=profile 以匹配配置文件记录的栈深度
  4. 在多台机器上通过递归深度测试验证
#stack-depth#javascript#recursion#fingerprinting#privacy