Контроль глубины стека в 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();
Запустите это на разных машинах с одним профилем. Сообщаемая глубина должна быть согласованной.
Начало работы
- Скачайте BotBrowser с GitHub
- Выберите профиль из репозитория профилей
- Добавьте
--bot-stack-seed=profileдля соответствия записанной глубине стека - Проверьте тестом рекурсивной глубины на разных машинах