Contrôle du taux de rafraîchissement avec BotBrowser
Comment BotBrowser contrôle la fréquence d'affichage et le timing de requestAnimationFrame au niveau du moteur pour prévenir le fingerprinting par taux d'images.
Introduction
L'API requestAnimationFrame synchronise les opérations de dessin avec le cycle de rafraîchissement de l'écran. La fréquence des callbacks révèle la fréquence d'affichage (60 Hz ≈ 16,67 ms, 144 Hz ≈ 6,94 ms), ce qui constitue une information accessible sans permission et utile au fingerprinting.
Impact sur la vie privée
La fréquence d'affichage est une caractéristique matérielle stable entre sessions et fournit aujourd'hui beaucoup plus d'entropie qu'il y a dix ans en raison de la diversité des panneaux et des configurations multi-écrans.
Approche BotBrowser au niveau du moteur
BotBrowser contrôle le taux d'images directement dans la boucle de rendu via l'option --bot-fps. Le pipeline de rendu tourne à la fréquence spécifiée, rendant cohérentes les sources dépendantes du taux d'images (requestAnimationFrame, animations CSS, etc.).
Modes principaux
# Utiliser la fréquence du profil
chrome --bot-profile="/path/to/profile.enc" --bot-fps=profile
# Forcer 60 FPS
chrome --bot-profile="/path/to/profile.enc" --bot-fps=60
# Utiliser la fréquence réelle de l'écran
chrome --bot-profile="/path/to/profile.enc" --bot-fps=real
Vérification
Mesurer les timestamps de requestAnimationFrame confirme que la FPS mesurée correspond à la configuration.
Résumé
Le contrôle du taux d'images par BotBrowser réduit l'information disponible pour le fingerprinting lié au refresh rate et complète d'autres protections (timing, Canvas, profils).
title: "Controle du taux d'images avec BotBrowser" description: "Comment BotBrowser controle les signaux de taux de rafraichissement de l'ecran avec le flag --bot-fps au niveau du moteur du navigateur." date: "2025-07-08" locale: fr category: fingerprint tags: ["fps", "frame-rate", "requestAnimationFrame", "fingerprinting", "privacy"] published: true
Le risque pour la vie privee
Le taux de rafraichissement de l'ecran, mesurable via le timing de requestAnimationFrame, revele le materiel du moniteur. Cette valeur est determinee par le materiel physique et ne change pas lors de la suppression des cookies ou du changement de navigateur.
La solution BotBrowser
BotBrowser fournit le flag --bot-fps pour controler le taux d'images au niveau du pipeline de rendu du moteur du navigateur.
Taux d'images base sur le profil
Utilisez la valeur du profil d'empreinte :
chrome --bot-profile="/path/to/profile.enc" \
--bot-fps=profile \
--user-data-dir="$(mktemp -d)"
Cela rapporte le taux d'images defini dans le profil, independamment du taux de rafraichissement reel de l'ecran.
Taux d'images personnalise ou reel
Definissez une valeur specifique ou utilisez le taux reel de l'ecran :
# 60 FPS fixes
chrome --bot-profile="/path/to/profile.enc" \
--bot-fps=60
# Taux de rafraichissement reel de l'ecran
chrome --bot-profile="/path/to/profile.enc" \
--bot-fps=real
Controle au niveau du moteur
Parce que cela opere au niveau du pipeline de rendu :
- Les callbacks
requestAnimationFramese declenchent au taux controle - Les horodatages de trame sont coherents avec le taux rapporte
- Les animations CSS se comportent de maniere coherente avec le taux d'images rapporte
Verification
Apres avoir lance avec --bot-fps, verifiez le taux d'images :
const { chromium } = require('playwright-core');
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-fps=60',
],
headless: true,
});
const page = await (await browser.newContext()).newPage();
const measuredFps = await page.evaluate(() => {
return new Promise(resolve => {
const timestamps = [];
function frame(ts) {
timestamps.push(ts);
if (timestamps.length < 60) {
requestAnimationFrame(frame);
} else {
const intervals = [];
for (let i = 1; i < timestamps.length; i++) {
intervals.push(timestamps[i] - timestamps[i - 1]);
}
const avg = intervals.reduce((a, b) => a + b) / intervals.length;
resolve(Math.round(1000 / avg));
}
}
requestAnimationFrame(frame);
});
});
console.log('FPS mesures:', measuredFps); // Devrait etre ~60
Verifications cles :
- Le taux d'images mesure correspond a la valeur configuree
- Les intervalles entre les trames sont coherents
- Plusieurs methodes de mesure produisent le meme resultat
Pour commencer
- Telechargez BotBrowser depuis GitHub
- Chargez un profil d'empreinte avec
--bot-profile - Definissez le taux d'images avec
--bot-fps=profile,--bot-fps=realou--bot-fps=60 - Verifiez que le taux d'images rapporte correspond a votre configuration