Назад к блогу
Отпечатки

Контроль глубины стека в BotBrowser: согласованные лимиты рекурсии

Как BotBrowser контролирует глубину рекурсии JavaScript с помощью флага --bot-stack-seed для кроссплатформенной согласованности.

Риск для конфиденциальности

Глубина рекурсии 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. Скачайте BotBrowser с GitHub
  2. Выберите профиль из репозитория профилей
  3. Добавьте --bot-stack-seed=profile для соответствия записанной глубине стека
  4. Проверьте тестом рекурсивной глубины на разных машинах
#stack-depth#javascript#recursion#fingerprinting#privacy