Qu'est-ce que le fingerprinting ? Guide complet
Tout ce que vous devez savoir sur le fingerprinting de navigateur : comment il fonctionne, quels signaux sont collectés, les risques pour la vie privée et comment vous protéger.
Vous préférez la doc produit maintenue ?
Cet article a une page équivalente dans le centre de documentation. Utilisez les docs pour le flux canonique, les flags à jour et la référence durable.
Introduction
Le fingerprinting de navigateur est une technique de pistage qui identifie les utilisateurs en collectant des informations sur la configuration de leur navigateur et de leur appareil. Contrairement aux cookies, qui stockent un identifiant explicite sur votre ordinateur, le fingerprinting fonctionne en lisant des propriétés qui existent déjà : votre résolution d'écran, votre modèle de GPU, vos polices installées, les caractéristiques de traitement audio, le comportement du moteur JavaScript, et des dizaines d'autres. Combinées, ces propriétés forment une "empreinte" qui est souvent unique à votre appareil et à la configuration de votre navigateur. Le fingerprinting ne nécessite aucun stockage, aucune permission, et aucun mécanisme de consentement utilisateur ne peut l'empêcher. Il persiste entre les sessions de navigation privée, survit à la suppression des cookies et fonctionne entre différents sites web. Cet article fournit un aperçu complet du fingerprinting de navigateur : comment il fonctionne, quels signaux sont collectés, pourquoi les défenses traditionnelles échouent, et comment BotBrowser fournit une protection au niveau du moteur du navigateur.
Impact sur la vie privée
Le fingerprinting de navigateur est passé d'une curiosité académique à une technologie de pistage mainstream. Plusieurs études à grande échelle documentent sa prévalence et son efficacité.
Le Princeton Web Transparency Project (2016) a parcouru le top 1 million de sites web et a trouvé des scripts de fingerprinting sur 5,5% d'entre eux. En 2020, les études de suivi ont montré que ce nombre avait grimpé à plus de 10%. Les bibliothèques de fingerprinting les plus courantes ciblent les signaux Canvas, WebGL, audio et polices.
Le projet Panopticlick/Cover Your Tracks de l'EFF a testé plus de 200 000 configurations de navigateurs et a trouvé que 83,6% étaient identifiables de manière unique. Même parmi les utilisateurs qui avaient pris des précautions de confidentialité (blocage des cookies, utilisation de VPN), la majorité pouvait encore être pistée par le fingerprinting seul.
AmIUnique, un projet de recherche sur le fingerprinting de l'INRIA, a trouvé que le navigateur médian dans leur jeu de données était distinguable de 99,1% de tous les autres. Seulement 0,9% des navigateurs partageaient une empreinte identique avec au moins un autre navigateur.
L'industrie commerciale du fingerprinting est substantielle. Plusieurs entreprises vendent des produits de fingerprinting-as-a-service aux annonceurs, services de détection de fraude et plateformes d'analyse. Ces services combinent des dizaines de signaux en un identifiant unique qui persiste entre les sessions et les sites.
Pour les utilisateurs individuels, le fingerprinting de navigateur signifie que vider les cookies, utiliser le mode navigation privée ou changer de réseau n'empêche pas le pistage. La combinaison de propriétés de votre appareil vous suit à travers le web.
Contexte technique : les catégories de signaux d'empreinte
Le fingerprinting de navigateur collecte des signaux de plusieurs catégories. Chaque catégorie contribue de l'entropie (bits d'information identifiante) à l'empreinte globale. Le diagramme suivant montre les principales catégories de signaux et leurs contributions approximatives en entropie.
Navigator et identité du navigateur
L'objet navigator est le premier arrêt de tout script de fingerprinting. Il expose :
- La chaîne d'agent utilisateur avec le nom du navigateur, la version et les détails du système d'exploitation
- La plateforme identifiant le système d'exploitation ("Win32", "MacIntel", "Linux x86_64")
- La concurrence matérielle révélant le nombre de coeurs CPU
- La mémoire de l'appareil exposant le niveau de RAM (Chromium uniquement)
- Les langues montrant les préférences de locale
- Les User Agent Client Hints fournissant des données structurées de navigateur et de plateforme
Ces propriétés sont universellement disponibles, ne nécessitent aucune permission, et combinées peuvent identifier des milliers de configurations uniques. Voir Navigator Property Protection pour les détails.
Canvas et rendu 2D
L'API HTML5 Canvas produit une sortie spécifique à l'appareil lors du dessin de texte, de formes et d'images. Le rendu au niveau des pixels dépend du GPU, du moteur de rendu des polices, de l'implémentation de l'anticrénelage et de la gestion des couleurs. Un script dessine une scène spécifique, relit les données de pixels et les hache. Le résultat varie entre les appareils mais est stable pour un appareil donné. Le fingerprinting Canvas est la technique de pistage la plus largement déployée après les cookies. Voir Canvas Fingerprinting pour les détails.
WebGL et WebGPU
WebGL expose l'identité GPU via les chaînes de renderer, les paramètres de capacité et la sortie de rendu. WebGPU ajoute des informations d'adaptateur structurées, des ensembles de fonctionnalités et des limites de capacité détaillées. Ensemble, ces API GPU fournissent l'un des signaux d'empreinte à plus haute entropie disponibles. Voir WebGL Fingerprint Protection et WebGPU Fingerprint Protection.
Traitement audio
L'API Web Audio produit une sortie spécifique à la plateforme lors du traitement audio via des oscillateurs, des compresseurs et des analyseurs. Aucun son n'est joué, aucune permission n'est nécessaire. La sortie dépend du matériel audio, de la pile audio du système d'exploitation et du moteur du navigateur. Voir Audio Fingerprint Protection.
Polices
L'énumération des polices révèle quelles polices sont installées, et les métriques de texte (largeurs de glyphes, boîtes englobantes) varient selon le moteur de rendu de la plateforme. La combinaison des polices installées et des métriques de texte fournit 8-10+ bits d'entropie. Voir Font Fingerprint Protection.
Écran et fenêtre
La résolution d'écran, la profondeur de couleur, le ratio de pixels de l'appareil, la zone d'écran disponible et les dimensions de la fenêtre varient tous selon les configurations matérielles et du système d'exploitation. Les marges entre les dimensions intérieures/extérieures de la fenêtre et les dimensions écran/écran-disponible révèlent le chrome de l'interface du système d'exploitation. Voir Screen and Window Protection.
Fonctionnalités média CSS
Les media queries CSS exposent les capacités d'affichage, les préférences utilisateur (mode sombre, mouvement réduit), le type de pointeur et le gamut de couleurs. Ces valeurs peuvent être extraites sans JavaScript via le chargement conditionnel de ressources CSS. Voir CSS Signal Consistency.
Performance et timing
La résolution de performance.now(), le timing de navigation, le timing des ressources et la vitesse d'exécution varient selon le matériel et le navigateur. Les signaux de timing sont difficiles à contrôler car ils émergent du comportement d'exécution réel. Voir Performance Timing Fingerprinting.
Internes du moteur
La profondeur de pile JavaScript (profondeur de récursion maximale) varie entre les navigateurs, les plateformes et les contextes d'exécution. Ce signal de bas niveau reflète les détails d'implémentation du moteur qui ne peuvent pas être modifiés depuis JavaScript. Voir Stack Depth Control.
Approches de protection courantes et leurs limites
VPN
Les VPN changent votre adresse IP mais n'ont aucun effet sur le fingerprinting de navigateur. Chaque signal d'empreinte listé ci-dessus est généré localement par le navigateur. Votre empreinte est identique que vous vous connectiez via un VPN ou directement.
Navigation privée / mode incognito
La navigation privée efface les cookies et le stockage local mais ne modifie aucun signal d'empreinte. Votre sortie Canvas, votre renderer WebGL, votre traitement audio, votre liste de polices et votre résolution d'écran sont tous identiques en mode privé.
Extensions de navigateur
Les extensions qui prétendent protéger les empreintes opèrent au niveau JavaScript. Elles interceptent les appels d'API et modifient les valeurs retournées. Cette approche a des limites fondamentales :
- Couverture incomplète. Les extensions doivent intercepter chaque API pertinente. En manquer une (par ex. OffscreenCanvas, AudioWorklet, media queries CSS) crée une faille.
- Modification détectable. Les substitutions de propriétés JavaScript peuvent être détectées par l'inspection des prototypes, l'analyse de timing et la validation par recoupement.
- Angle mort CSS. Les extensions ne peuvent pas modifier l'évaluation des media queries CSS, qui opère au niveau du moteur de rendu.
- Incohérence. Changer une valeur sans ajuster les valeurs corrélées crée des anomalies détectables. Rapporter un agent utilisateur macOS alors que le rendu Canvas montre un anticrénelage de texte de style Windows est incohérent.
Randomisation
Randomiser les valeurs d'empreinte (nouveau hash Canvas à chaque chargement de page, empreinte audio différente à chaque fois) crée une instabilité qui est en soi un signal de pistage. Les appareils légitimes produisent des empreintes stables. Les empreintes instables identifient les utilisateurs qui essaient activement d'empêcher le pistage.
Tor Browser
Tor Browser adopte l'approche la plus rigoureuse : standardiser toutes les valeurs d'empreinte pour tous les utilisateurs. Chaque Tor Browser rapporte la même résolution d'écran, la même liste de polices, la même sortie Canvas et le même agent utilisateur. La limitation est que "Tor Browser" lui-même devient l'identité. L'empreinte standardisée vous identifie comme utilisateur de Tor, ce qui est une très petite population.
L'approche de BotBrowser au niveau du moteur
BotBrowser adopte une approche fondamentalement différente : il contrôle les signaux d'empreinte au niveau du moteur de rendu Chromium via des profils d'appareil complets. Plutôt que de bloquer, randomiser ou intercepter des signaux individuels, BotBrowser configure le moteur du navigateur pour se comporter comme s'il fonctionnait sur l'appareil profilé.
Profils d'appareil complets
Un profil BotBrowser décrit un appareil entier : le système d'exploitation, la version du navigateur, le GPU, le matériel audio, la configuration d'écran, les polices installées, le CPU, la mémoire et plus encore. Une fois chargé, le profil configure chaque sous-système du moteur simultanément. Tous les signaux s'alignent car ils proviennent tous du même profil.
Contrôle au niveau du moteur
BotBrowser modifie Chromium au niveau du code source. Le rendu Canvas, les paramètres WebGL, le traitement audio, l'énumération des polices, les propriétés du navigator, les dimensions de l'écran et le comportement du timing sont tous contrôlés en interne. Cela signifie :
- Pas de substitutions de propriétés visibles en JavaScript
- Pas de modifications de prototypes détectables
- Les API CSS et JavaScript retournent les mêmes valeurs
- Les contextes Worker et le thread principal sont cohérents
- Les iframes reçoivent des valeurs cohérentes
Fonctionnement multiplateforme
En s'exécutant sur Linux, vous pouvez charger un profil Windows. En s'exécutant sur macOS, vous pouvez charger un profil Android. Le contrôle au niveau du moteur est suffisamment profond pour produire un comportement de rendu spécifique à la plateforme indépendamment du système d'exploitation hôte. Le texte Canvas est rendu avec l'anticrénelage de style Windows sur une machine Linux lorsqu'un profil Windows est chargé.
Bruit déterministe
Le flag --bot-noise-seed fournit une variation déterministe. Chaque graine produit une empreinte unique et stable. Le même profil et la même graine produisent toujours la même empreinte, entre les sessions, entre les machines, entre les systèmes d'exploitation. Des graines différentes produisent des empreintes différentes. Cela vous donne un contrôle explicite sur l'identité : même graine égale même identité, graine différente égale identité différente.
Couverture complète des signaux
BotBrowser couvre toutes les catégories majeures d'empreinte :
| Catégorie de signal | Mécanisme de protection |
|---|---|
| Propriétés navigator | Valeurs pilotées par profil pour toutes les propriétés |
| Canvas 2D | Contrôle de rendu au niveau du moteur + bruit |
| WebGL | Identité GPU, paramètres et rendu |
| WebGPU | Informations d'adaptateur, fonctionnalités, limites et rendu |
| Audio | Contrôle du pipeline de traitement audio + bruit |
| Polices | Liste de polices contrôlée et métriques de texte |
| Écran/Fenêtre | Dimensions et marges pilotées par profil |
| Fonctionnalités média CSS | Évaluation média au niveau du moteur |
| Timing de performance | Graine de timing pour performance déterministe |
| Profondeur de pile | Contrôle de la limite de récursion au niveau du moteur |
| Informations réseau | Propriétés de connexion pilotées par profil |
Configuration et utilisation
Utilisation de base
La configuration la plus simple charge un profil :
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Ce seul flag active la protection sur toutes les catégories de signaux.
Configuration déterministe complète
Pour un comportement déterministe complet :
chrome --bot-profile="/path/to/profile.enc" \
--bot-noise-seed=42 \
--bot-time-seed=42 \
--bot-stack-seed=profile \
--user-data-dir="$(mktemp -d)"
Avec proxy et locale auto-détectée
chrome --bot-profile="/path/to/profile.enc" \
--proxy-server=http://user:pass@proxy.example.com:8080 \
--bot-config-timezone=auto \
--bot-config-locale=auto \
--bot-config-languages=auto \
--bot-noise-seed=42 \
--user-data-dir="$(mktemp -d)"
Intégration Playwright
const { chromium } = require('playwright');
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-noise-seed=42',
'--bot-time-seed=42',
'--bot-stack-seed=profile'
]
});
const page = await browser.newPage();
await page.goto('https://example.com');
// Tous les signaux d'empreinte sont maintenant contrôlés par le profil
const info = await page.evaluate(() => ({
userAgent: navigator.userAgent,
platform: navigator.platform,
cores: navigator.hardwareConcurrency,
screenWidth: screen.width,
colorDepth: screen.colorDepth,
devicePixelRatio: window.devicePixelRatio
}));
console.log(info);
Intégration Puppeteer
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({
executablePath: '/path/to/botbrowser/chrome',
defaultViewport: null,
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-noise-seed=42',
'--bot-time-seed=42',
'--bot-stack-seed=profile'
]
});
const page = await browser.newPage();
await page.goto('https://example.com');
Répertoire de profils multiples
Pour la rotation automatique des profils entre les instances :
chrome --bot-profile-dir="/path/to/profiles/" \
--bot-noise-seed=42 \
--user-data-dir="$(mktemp -d)"
BotBrowser sélectionne aléatoirement un profil du répertoire à chaque démarrage.
Vérification
Cohérence de l'empreinte. Visitez un site de test d'empreinte (BrowserLeaks, CreepJS, AmIUnique) avec le même profil et la même graine dans deux sessions séparées. L'empreinte rapportée devrait être identique.
Test inter-machines. Exécutez le même profil et la même graine sur deux machines différentes. L'empreinte devrait correspondre.
Vérification par catégorie de signal. Vérifiez chaque catégorie majeure de signal individuellement :
- Les propriétés du navigator correspondent au profil
- Le hash Canvas est stable entre les sessions
- Le renderer WebGL correspond au GPU du profil
- L'empreinte audio est stable avec la même graine
- La liste de polices correspond au système d'exploitation du profil
- Les dimensions de l'écran correspondent au profil
Cohérence headless/avec affichage. Exécutez le même test en mode headless et avec affichage avec --bot-config-window=profile. L'empreinte devrait être identique.
Bonnes pratiques
- Chargez toujours un profil. Exécuter BotBrowser sans
--bot-profilene fournit aucune protection des empreintes. Le profil est la base. - Utilisez
--bot-noise-seedpour des identités stables. Sans graine, le bruit de rendu varie entre les sessions. Une graine garantit la reproductibilité. - Utilisez
defaultViewport: nulldans Puppeteer. Cela empêche Puppeteer de substituer les paramètres d'affichage du profil. - Laissez BotBrowser auto-détecter la locale.
--bot-config-timezone=auto,--bot-config-locale=autoet--bot-config-languages=autodérivent la locale depuis votre IP de proxy pour la cohérence géographique. - Gardez les profils à jour. Les agents utilisateur et capacités des navigateurs changent à chaque version. Utilisez des profils actuels depuis le dépôt de profils BotBrowser.
- Ne substituez pas manuellement les propriétés individuelles. Le profil garantit la cohérence interne. Substituer une propriété sans ajuster les autres crée des incohérences détectables.
- Combinez avec un proxy approprié. La protection des empreintes traite l'identité de l'appareil. L'identité réseau (adresse IP, géolocalisation) nécessite un proxy.
FAQ
Q : Quelle est la différence entre le fingerprinting de navigateur et les cookies ? R : Les cookies sont des identifiants explicites stockés sur votre appareil. Vous pouvez les voir, les bloquer et les supprimer. Le fingerprinting lit des propriétés qui existent déjà (taille d'écran, modèle de GPU, etc.) et ne stocke rien. Vous ne pouvez pas "effacer" une empreinte car il n'y a rien à effacer.
Q : Le fingerprinting peut-il me pister entre différents sites web ? R : Oui. Si deux sites web utilisent la même bibliothèque de fingerprinting, ou si un script de pistage tiers est intégré sur les deux sites, votre empreinte peut être mise en correspondance entre eux. Cela fonctionne même sans cookies.
Q : Quelle est l'unicité de mon empreinte de navigateur ? R : Selon les études de recherche, plus de 80% des navigateurs ont une empreinte unique. La combinaison de la résolution d'écran, du GPU, des polices, du traitement audio et d'autres signaux est suffisante pour distinguer la plupart des utilisateurs.
Q : BotBrowser bloque-t-il les scripts de fingerprinting ? R : Non. BotBrowser ne bloque aucun script. Au lieu de cela, il contrôle ce que les scripts voient. Lorsqu'un script de fingerprinting collecte votre hash Canvas, votre renderer WebGL et votre empreinte audio, il obtient les valeurs du profil chargé, pas de votre matériel réel.
Q : Puis-je utiliser BotBrowser pour la navigation normale ? R : Oui. BotBrowser est un navigateur Chromium complet. Toutes les fonctionnalités web (y compris les extensions, les outils de développement et la lecture média) fonctionnent normalement. La protection des empreintes opère de manière transparente en arrière-plan.
Q : Combien d'identités uniques puis-je créer ? R : Chaque combinaison de profil et de graine de bruit crée une identité unique. Avec plusieurs profils et des graines de 1 à 4 294 967 295, le nombre d'identités uniques possibles est effectivement illimité.
Q : Le fingerprinting de navigateur est-il légal ? R : La légalité varie selon la juridiction. Le RGPD de l'UE et la directive ePrivacy considèrent le fingerprinting comme une forme de pistage qui nécessite le consentement. En pratique, l'application est limitée et la plupart du fingerprinting se produit sans consentement explicite de l'utilisateur. BotBrowser vous donne la capacité de contrôler quelles informations votre navigateur révèle.
Q : BotBrowser fonctionne-t-il avec Selenium ? R : BotBrowser fonctionne avec tout framework d'automatisation qui peut lancer Chromium avec des arguments personnalisés, y compris Selenium, Playwright et Puppeteer.
Résumé
Le fingerprinting de navigateur est une technique de pistage omniprésente qui identifie les utilisateurs via la configuration de leur appareil et de leur navigateur. Il opère sans cookies, sans permissions et sans que l'utilisateur en soit conscient. Les protections traditionnelles comme les VPN, le mode navigation privée et les extensions de navigateur ne traitent que des fragments du problème ou introduisent des incohérences détectables.
BotBrowser fournit une protection complète des empreintes en contrôlant toutes les catégories de signaux au niveau du moteur Chromium. Les profils d'appareil complets garantissent que chaque surface d'API, des propriétés du navigator au rendu Canvas en passant par le traitement audio, retourne des valeurs provenant d'une identité d'appareil unique et cohérente. Le flag --bot-noise-seed rend les empreintes déterministes et reproductibles. Le résultat est un navigateur qui présente une identité d'appareil cohérente et réaliste indépendamment du matériel sous-jacent réel.
Pour une couverture détaillée de catégories d'empreinte spécifiques, voir :
Articles Connexes
Faites passer BotBrowser de la recherche à la production
Utilisez ces guides pour comprendre le modèle, puis passez à la validation multi-plateforme, aux contextes isolés et au déploiement navigateur prêt pour l'échelle.