Controle de profondeur de pile par BotBrowser : limites de recursion coherentes
Comment BotBrowser controle la profondeur de recursion JavaScript avec le flag --bot-stack-seed pour la coherence multiplateforme.
Le risque pour la vie privee
La profondeur de recursion JavaScript varie selon le moteur du navigateur, le systeme d'exploitation et l'architecture CPU. Cette variation peut servir de signal de pistage. BotBrowser controle la profondeur de pile au niveau du moteur avec le flag --bot-stack-seed.
Le flag --bot-stack-seed
BotBrowser fournit trois modes de controle de profondeur de pile :
# Utiliser la valeur du profil d'empreinte (recommande)
chrome --bot-profile="/path/to/profile.enc" \
--bot-stack-seed=profile
# Utiliser la limite naturelle de l'hote
chrome --bot-profile="/path/to/profile.enc" \
--bot-stack-seed=real
# Definir une profondeur personnalisee
chrome --bot-profile="/path/to/profile.enc" \
--bot-stack-seed=12500
En mode profile, la profondeur de pile correspond a la valeur enregistree depuis l'appareil reel dont le profil a ete capture. C'est le reglage recommande pour la coherence multiplateforme.
Controle au niveau du moteur
La modification se produit dans le moteur du navigateur avant l'execution de tout JavaScript. Elle affecte tous les contextes d'execution : thread principal, Web Workers et iframes. Le debordement de pile se produit naturellement a la profondeur configuree.
Combinaison avec d'autres flags deterministes
Le controle de profondeur de pile fonctionne mieux dans le cadre d'une configuration deterministe complete :
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)"
Verification
Verifiez la coherence de la profondeur de pile avec 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();
Executez ceci sur differentes machines avec le meme profil. La profondeur rapportee doit etre coherente.
Pour commencer
- Telechargez BotBrowser depuis GitHub
- Choisissez un profil du depot de profils
- Ajoutez
--bot-stack-seed=profilepour correspondre a la profondeur de pile enregistree - Verifiez avec un test de profondeur recursive sur differentes machines