Lire les signaux d’empreinte du navigateur
Comparez les groupes de signaux et examinez leurs différences sans tirer de conclusions excessives.
BotBrowser Team
Vous voulez la documentation structurée pour Empreinte ?
Cet article fait partie de la bibliothèque éditoriale. Pour les étapes de configuration, la référence et les mises à jour continues, passez directement à la section docs.
BotBrowser peut répéter un contrôle autorisé appartenant à une page avec des paramètres de navigateur et de profil déclarés, puis capturer des champs visibles par le navigateur et limités au besoin. Il ne peut pas expliquer toutes les causes d’une différence, identifier une personne ni prédire la décision privée d’un service. Une analyse utile sépare d’abord les groupes de signaux, puis vérifie le contexte d’exécution avant d’attribuer la suite de l’enquête.
TL;DR
- Traitez Canvas, WebGL, navigator, l’écran, l’audio, les polices, le fuseau horaire et le comportement des fonctions comme des observations distinctes.
- Un hachage différent précise ce qui a changé ; il n’identifie ni la cause ni une personne.
- Conservez la version du navigateur, le système, l’origine, les autorisations, le contexte page ou worker et le nom du contrôle pour chaque comparaison.
- Une implémentation publique renseigne sur ses propres contrôles, pas sur une norme navigateur ni sur la décision d’un tiers.
Contents
- Commencer par les groupes de signaux
- Interpréter précisément les contrôles de comportement
- Conserver le contexte de comparaison
- Définir la portée de la conclusion
- Practical conclusion
Commencer par les groupes de signaux
Une analyse d’empreinte navigateur est plus facile à déboguer lorsque chaque observation reste liée à l’API ou au comportement qui l’a produite. Le rendu Canvas, les paramètres WebGL, les propriétés navigator, les métriques d’écran, la sortie audio, les polices, le fuseau horaire et le comportement des fonctions ont des entrées et des modes d’échec différents. Les réunir sous une seule étiquette masque la surface qui a changé.
Une implémentation publique illustre ce choix de regroupement : sa source épinglée assemble des résumés distincts pour Canvas, WebGL, l’écran, le fuseau horaire, l’audio, les polices, navigator et certains contrôles de fonctions. Cet exemple décrit les collecteurs de cette implémentation. Il ne constitue pas un inventaire complet du fingerprinting navigateur, et un résumé qui change n’établit pas une cause unique.
La documentation BotBrowser sur le fingerprinting présente les contrôles produit et la cohérence des profils. Cet article ajoute une méthode pour classer les différences entre groupes, conserver le contexte et orienter l’enquête sans faire d’un vérificateur l’autorité d’un site.
Pour le vocabulaire de base, consultez ce qu’est une empreinte de navigateur. Pour une méthode de preuve répétable, utilisez comment vérifier une empreinte de navigateur ; ces deux pages donnent le contexte de cette méthode par groupes.
Si le résumé Canvas change alors que les champs navigator restent stables, conservez ces deux faits au lieu d’écrire « l’empreinte a changé ». La première formulation indique où commencer ; la seconde efface cette limite utile. Consultez aussi l’intégrité des API du navigateur entre realms et la validation navigateur respectueuse de la vie privée.
Interpréter précisément les contrôles de comportement
Certains vérificateurs examinent la manière dont les fonctions JavaScript se présentent. Parmi les exemples publics figurent la comparaison du résultat de Function.prototype.toString(), l’énumération de descripteurs de propriétés propres et la vérification des erreurs attendues pour des appels ou des fonctions enveloppées dans Proxy. Ces tests encodent les attentes d’une implémentation donnée ; ils ne forment pas une suite complète de conformité pour tous les realms du navigateur.
Un cas en échec permet une conclusion limitée : un comportement contrôlé différait de l’attente du vérificateur dans un contexte. Cela n’explique pas si l’écart vient d’une mise à jour du navigateur, d’une extension, d’une instrumentation, d’un wrapper ou du fixture. Un cas réussi ne couvre lui aussi que le chemin testé. Gardez le nom du contrôle et l’API avec le résultat afin qu’une autre personne puisse poser la même question.
Ne présentez pas un seul indicateur « lie » comme preuve qu’un navigateur trompe. Indiquez le comportement exact, le contexte du contrôle et si la comparaison utilisait une fenêtre ou un worker. Voir la référence MDN de Function.prototype.toString() et la référence MDN des descripteurs de propriétés.
Conserver le contexte de comparaison
Avant de comparer des valeurs, consignez les conditions susceptibles de les modifier. Au minimum, gardez la version du navigateur, le système, l’origine, l’état des autorisations, le cycle de vie du profil et le contexte d’exécution. Si un contrôle s’exécute à la fois dans la page et dans worker, étiquetez les deux relevés séparément. Une différence de contexte peut ressembler à une régression alors que le binaire du navigateur n’a pas changé.
Ne modifiez qu’une seule entrée déclarée par comparaison. Si le navigateur et le profil changent pendant la même exécution, le résultat ne permet pas d’attribuer l’écart à l’un ou l’autre. Pour des contrôles produit répétables, utilisez la même page et le même fixture détenus par l’équipe, capturez le premier champ différent et conservez la révision source du vérificateur qui définit le résultat attendu.
La minimisation des données s’applique aussi au diagnostic. Ne gardez que les champs utiles à l’orientation du problème ; ne les joignez pas à des identifiants de compte, à un historique sans rapport ou à des données intersites. Les principes de confidentialité du W3C donnent un cadre plus large de minimisation. Une valeur visible du navigateur peut être sensible sans identifier directement quelqu’un.
Orienter une différence vers le bon interlocuteur
Utilisez la première observation différente pour choisir une piste d’examen, pas pour attribuer une gravité universelle :
| Première observation différente | Premier examen | Comparaison suivante |
|---|---|---|
| Résumé Canvas ou WebGL | Responsable du rendu | Version du navigateur, backend graphique, système et entrée de dessin ou paramètre exact |
Champ navigator ou écran | Responsable du contexte navigateur | Autorisation, émulation, configuration du profil et contexte page ou worker |
| Contrôle de texte de fonction ou de descripteur | Responsable de l’intégration JavaScript | Wrapper, ordre d’instrumentation, clés propres et fonction exacte contrôlée |
| Champ audio, police ou fuseau horaire | Responsable de l’environnement | Polices installées, chemin audio, langue du système et cycle du profil |
| Plusieurs groupes ont changé ensemble | Responsable des tests | Origine, version du fixture, navigateur, profil et moment d’exécution avant le code |
Ce tableau aide au triage, il ne pose pas de diagnostic. Il dirige la première question vers l’équipe la mieux placée pour vérifier l’entrée. Une observation navigateur peut être répétée dans un contexte BotBrowser contrôlé et autorisé, mais cette répétition ne révèle pas la notation privée d’un tiers.
Créer un relevé d’observation limité
Utilisez un petit relevé qui garde ensemble l’observation et ses limites. Il s’agit d’un exemple de schéma, pas d’une sortie mesurée :
{
"fixture": "owned-signal-review-v1",
"browserBuild": "declared build",
"os": "declared OS",
"origin": "https://app.example.test",
"context": "page",
"profileLifecycle": "fresh",
"checkSourceRevision": "pinned source commit",
"changedGroup": "webgl",
"checkName": "parameter summary",
"outcome": "changed",
"interpretation": "review rendering inputs before changing profile settings"
}
Utilisez une origine synthétique détenue dans les exemples et ne la remplacez que dans un relevé de test privé. Ne stockez pas de sortie Canvas brute, d’échantillons audio complets, de données de compte ou de signaux sans rapport lorsqu’une étiquette de groupe suffit. Si le vérificateur n’expose pas sa révision ou son contexte, marquez le champ inconnu au lieu de le deviner.
Une exécution BotBrowser autorisée peut répéter la page déclarée et conserver ces champs limités pour comparer des versions. Elle ne peut pas certifier qu’un signal est inoffensif, déduire une personne d’une valeur navigateur ni garantir l’acceptation d’un service externe. Gardez cette limite auprès du relevé à chaque transmission.
Définir la portée de la conclusion
Les contrôles de surface du navigateur répondent pour le chemin qu’ils exécutent. Ils ne dévoilent pas le modèle de risque complet d’un site, qui peut inclure réputation réseau, historique du compte, rythme des requêtes, état serveur et règles propres à l’application. Un résultat de cohérence ne doit donc pas être présenté comme une prédiction sur un WAF ni comme une garantie d’anonymat.
Pour la confidentialité, les principes du W3C mettent l’accent sur la finalité et la minimisation des données. En ingénierie, la limite pratique est tout aussi directe : comparez un fixture déclaré, rapportez le champ observé et indiquez ce qui reste inconnu. Si l’affirmation dépend de la décision d’un service, obtenez une preuve dans un test d’intégration autorisé au lieu d’extrapoler depuis un vérificateur navigateur.
L’en-tête minimal d’un transfert doit inclure browserBuild, os, origin, context, changedGroup et testedOn: 2026-10-29. Liez le relevé à la même référence des principes du W3C et au fixture de page exact. Ces champs concrets rendent une comparaison ultérieure vérifiable sans conserver les valeurs brutes des signaux.
Effectuer une comparaison contrôlée.
Commencez par formuler une question qui nomme un seul champ et un seul contexte. « Le résumé du paramètre WebGL a-t-il changé après la mise à jour du navigateur avec le même profil ? » est vérifiable. « Cette empreinte navigateur est-elle cohérente ? » mélange de nombreuses surfaces et ne définit pas la limite de comparaison. Une question précise permet aussi de s’arrêter lorsque le champ pertinent est expliqué.
Suivez cette séquence pour une page de test détenue :
- Consignez l’origine de la page, la version du navigateur, le système d’exploitation, le cycle de vie du profil, l’état des autorisations et l’exécution du code dans une fenêtre ou un worker.
- Exécutez deux fois la page inchangée dans le contexte de référence déclaré. Si le champ choisi varie entre ces exécutions, examinez la stabilité du fixture avant de comparer les versions du navigateur.
- Modifiez uniquement la variable nommée dans la question, par exemple la version du navigateur. Gardez fixes l’origine, le cycle de vie du profil, les autorisations et le bundle de la page.
- Comparez le premier champ modifié et son chemin d’origine. Conservez le nom exact de la propriété ou du contrôle au lieu de copier un rapport d’empreinte complet.
- Répétez la référence après la comparaison. Le retour à la valeur initiale aide à distinguer une entrée modifiée d’une dérive de contexte, mais ne suffit pas à établir la cause.
Un contexte BotBrowser autorisé peut répéter un fixture détenu par la page avec des entrées de profil déclarées et conserver un relevé limité. Le propriétaire du fixture choisit la page, définit les champs qu’il est sûr de conserver et détermine si la différence observée importe pour l’application. L’automatisation du navigateur fournit un contexte d’exécution répétable ; elle ne fournit pas la politique de risque du produit.
Diagnostiquer les écarts courants.
Lorsqu’un résultat diffère, vérifiez d’abord si le test s’est déroulé dans les mêmes conditions. Une propriété navigator absente ou modifiée peut résulter d’un état d’autorisation différent, d’un réglage émulé, d’un passage de la page au worker ou d’un profil modifié. Une différence Canvas ou WebGL peut venir d’une entrée de rendu ou d’un changement de backend. Un contrôle de comportement de fonction peut dépendre de l’ordre d’instrumentation ou d’un wrapper installé avant le contrôle. Ce sont des hypothèses à tester, pas des causes à déduire de la seule sortie.
Si le champ manque.
Vérifiez si le code a demandé le champ, si son prérequis était disponible et si la page avait l’autorisation d’utiliser la capacité concernée. Examinez ensuite le chemin de présentation : certaines pages de diagnostic omettent les valeurs qu’elles jugent indisponibles, peu fiables ou hors de la vue actuelle. « Absent du rapport » et « non pris en charge par le navigateur » sont deux résultats différents.
Si la page et le worker divergent.
Confirmez que les deux contextes ont reçu le même bundle de page et que le worker a été créé correctement. Indiquez le contexte à côté de chaque valeur. Ne combinez pas un résultat de page provenant d’un profil avec un résultat de worker provenant d’un autre. Si le test lit volontairement la même propriété dans les deux contextes, rapportez deux lignes et comparez leurs entrées avant de conclure à un défaut du navigateur.
Si seul un contrôle de fonction change.
Examinez le chargement de la fonction et vérifiez si un wrapper applicatif ou l’instrumentation du test l’a remplacée avant le contrôle. La référence publique Function.prototype.toString() décrit l’API standard, tandis qu’un vérificateur peut ajouter des hypothèses sur l’apparence attendue d’une fonction native précise. Comparez la fonction exacte et ses clés de propriétés propres ; une étiquette générique « lie » ne suffit pas à localiser un changement d’intégration.
Si plusieurs groupes changent à la fois.
Avant de modifier le code, revenez aux en-têtes d’exécution. Vérifiez si la version du navigateur, l’image du système, la locale, le cycle du profil, les autorisations ou l’origine ont changé ensemble. Rétablissez la référence et faites varier une seule entrée. Si les groupes évoluent encore ensemble lors d’une exécution contrôlée, consignez cette relation comme observation, non comme preuve qu’un groupe a causé les autres.
Préparer un transfert d’incident utile.
Un transfert d’assistance doit permettre au prochain responsable de reproduire la première divergence sans recevoir tout l’historique de navigation. Incluez l’identifiant du fixture, l’heure d’exécution, la version du navigateur, le système, l’étiquette du profil, la classe d’origine, le contexte, le groupe modifié, le nom exact du contrôle et le premier champ différent. Ajoutez une révision source lorsque le comportement attendu dépend de l’implémentation du vérificateur. Excluez cookies, identifiants de compte, URL sans rapport, sortie Canvas brute et échantillons audio complets, sauf si une enquête autorisée distincte les exige.
L’action suivante doit découler des preuves. Le responsable du rendu peut comparer le même dessin entre versions. Le responsable du contexte peut répéter un contrôle de permission ou de worker avec des réglages fixes. Le responsable de l’intégration JavaScript peut comparer la fonction avant et après l’instrumentation applicative. Le responsable des tests peut vérifier que le fixture et l’origine n’ont pas dérivé. « Enquêter sur l’empreinte » n’est pas un transfert exploitable : il ne nomme ni le premier champ modifié ni la prochaine comparaison contrôlée.
Si le relevé sort de l’équipe applicative, retirez les noms d’hôtes internes et toute valeur pouvant être reliée à un utilisateur ou un compte. Gardez assez de contexte pour interpréter le résultat, sans transformer le dossier de diagnostic en identifiant de profil réutilisable. La minimisation des données relève de la conception du relevé ; elle ne prouve pas qu’un champ particulier est inoffensif.
Éviter les comparaisons trompeuses.
Plusieurs raccourcis produisent un nombre sans conclusion défendable :
- Comparer deux origines différentes peut modifier simultanément les autorisations, le stockage, la politique de fonctionnalités et le code applicatif.
- Comparer un profil persistant à un profil neuf peut modifier les permissions accordées, les ressources en cache, les service workers et l’état de l’application.
- Comparer un résultat de page à un résultat de worker sans étiqueter le contexte mélange des environnements d’exécution distincts.
- Comparer la sortie Canvas ou audio brute peut conserver davantage de détails identifiants que la question ne l’exige.
- Traiter un digest modifié comme un changement d’identité confond une fonction de résumé avec une propriété individuelle.
- Traiter un contrôle comportemental réussi comme une cohérence complète étend un petit test au-delà des chemins réellement couverts.
Utilisez ces exemples pour revoir la conception de la comparaison, pas pour déduire qu’une condition a causé un résultat. Si le test ne peut maintenir une variable constante, indiquez cette limite près de l’observation et n’attribuez pas une cause unique.
Distinguer compatibilité et confidentialité.
La compatibilité demande si l’application détenue peut utiliser une capacité navigateur déclarée dans des conditions précises. La confidentialité demande si la collecte ou la conservation d’une observation est nécessaire et proportionnée. Un champ utile au débogage peut rester inadapté à l’analytique courante. Séparez les décisions : définissez d’abord le contrôle de compatibilité, puis décidez s’il faut stocker sa sortie, combien de temps et par qui.
Pour un contrôle de version, un relevé temporaire peut suffire à confirmer la présence d’un champ requis et le fonctionnement d’un repli. Pour le suivi produit agrégé, conservez des comptages ou des catégories grossières plutôt que les valeurs brutes. Dans une déclaration de confidentialité destinée aux utilisateurs, décrivez les données réellement collectées par l’application ; un vérificateur navigateur ne remplace pas l’examen des journaux serveur, de la configuration analytique ou des rapprochements de comptes.
Les principes du W3C fournissent un cadre de limitation des finalités et de minimisation des données. Ils ne certifient pas un plan de test précis. Le propriétaire de l’application doit toujours vérifier ce que le fixture émet, où va le relevé et si des identifiants sans rapport y sont joints.
Examiner un vérificateur fondé sur les sources.
Un vérificateur open source peut expliquer un résultat particulier si la revue est épinglée à une révision. L’implémentation citée regroupe Canvas, WebGL, écran, fuseau horaire, audio, polices, navigator et certains contrôles de fonctions dans des sorties séparées. Son code de vérification des fonctions traite la conversion en chaîne, les descripteurs de propriétés, les erreurs attendues et le comportement Proxy. Ces détails expliquent la conception du vérificateur ; ils ne prouvent ni que tous les navigateurs exposent le même comportement ni qu’un service utilise les mêmes contrôles.
Pour vérifier une affirmation sur la source, examinez le point d’entrée du collecteur et le fichier de contrôle précis au même commit. Notez le champ de sortie assemblé, la condition qui peut l’omettre et ce qu’un cas d’échec compare réellement. Si la page évolue ensuite, utilisez les liens vers les commits fixés de cet article jusqu’à la nouvelle revue de l’affirmation. Une branche par défaut mouvante peut modifier les contrôles sans changer le sens d’une observation antérieure.
Ne citez pas un fichier source comme s’il s’agissait d’une mesure d’exécution. La revue du code peut établir qu’un test est implémenté ; elle ne peut établir qu’une exécution donnée du navigateur l’a réussi ou échoué. Pour une preuve d’exécution, utilisez un relevé daté indiquant la commande ou page réelle, la sortie, la version du navigateur, le système d’exploitation et le contexte du profil. Cet article ne prétend pas qu’une telle exécution a eu lieu.
Décider si les preuves suffisent.
Une observation est prête pour une décision d’ingénierie limitée lorsque la question de test est explicite, le contexte de comparaison consigné, le premier champ modifié reproductible et l’action suivante ciblée sur ce champ. Elle ne l’est pas si la seule preuve est un score, une capture non étiquetée ou un grand rapport sans référence. Dans ce cas, précisez la question et relancez une comparaison contrôlée avant de modifier les réglages du navigateur ou le code produit.
La décision peut aussi être de ne rien changer. Si une différence vient d’une entrée de rendu attendue du système et que l’application détenue fonctionne correctement, consignez la condition de compatibilité et évitez de modifier des champs de profil sans rapport pour uniformiser la sortie du vérificateur. Si la différence bloque une exigence applicative, conservez une reproduction minimale et transmettez-la au responsable de la surface navigateur ou de la couche d’intégration.
N’assimilez pas stabilité et confidentialité, ni variabilité et défaut. Certaines API sont conçues pour varier, certaines sont contrôlées par des règles, et d’autres ne sont stables que dans un environnement déclaré. La bonne conclusion dépend de l’exigence applicative et du chemin observable exact, pas d’une préférence générale pour des sorties identiques.
Sources
- Principes de confidentialité du W3C
- MDN :
Function.prototype.toString() - MDN :
Object.getOwnPropertyDescriptor() - Implémentation publique des groupes de signaux, révision fixée de
creep.ts - Contrôles publics du comportement des fonctions, révision fixée de
lies/index.ts - Documentation BotBrowser sur le fingerprinting
Next reading
Consultez l’intégrité des API du navigateur entre realms lorsque la même propriété est lue depuis plusieurs contextes. Consultez la validation navigateur respectueuse de la vie privée si le diagnostic doit limiter la conservation des données.
Le guide public des preuves Cloudflare Bot Score montre pourquoi un score de service doit rester séparé des groupes de signaux visibles du navigateur : aucun des deux ne constitue un verdict sur une personne.
Practical conclusion
Commencez par le premier groupe de signaux modifié, conservez le navigateur et le contexte d’exécution, puis comparez une seule entrée déclarée à la fois. Une observation limitée oriente une enquête utile ; elle n’identifie pas une personne et ne prédit pas la décision privée d’un tiers.
Cet article fait partie du guide : Qu'est-ce qu'une empreinte de navigateur ?
Articles Connexes
Qu'est-ce qu'une empreinte de navigateur ?
PlateformeSurfaces de la plateforme web : carte de revue
DéploiementSignaux headless et avec interface : méthode de comparaison
EmpreinteV8Log Forensics : preuves d'exécution pour la validation privacy
EmpreinteObservabilité de l’aléa cryptographique et empreintes du navigateur
EmpreinteEmpreinte audio expliquée : comment AudioContext vous piste
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.