Retour au Centre de connaissances
Empreinte

FingerprintJS OSS : collecte et provenance du condensat

Suivez load(), l’ordre des sources, les erreurs de composants et le condensat paresseux visitorId de FingerprintJS OSS sans prétendre qu’un détecteur a été exécuté.

BotBrowser Team

Documentation

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 fixture autorisé de même origine et conserver des observations limitées sur les capacités, l’état des composants et le chemin du condensat, mais il ne peut pas exécuter un détecteur tiers, identifier une personne ni prouver qu’un fournisseur utilise les mêmes signaux. Cette revue de sources suit le commit FingerprintJS OSS 7a738d0e9920c7431b34aff24b345a21f9054855 dans src/agent.ts, src/sources/index.ts et src/index.ts.

TL;DR

  • load() utilise monitoring = true par défaut ; monitoring: false désactive la requête d’installation non personnalisée.
  • get() collecte les composants, expose value ou error pour chacun et renvoie un visitorId paresseux.
  • hashComponents() trie les clés et hache les valeurs canoniques ; cela décrit la provenance du résultat de la bibliothèque, pas une identité.
  • L’ordre compte : les sources asynchrones commencent d’abord et les sources WebGL s’exécutent après celles qui peuvent affecter le rendu.

Contents

SOURCE_ORDER mène à COMPONENT_STATUS, CANONICAL_HASH, LAZY_VISITOR_ID et à un relevé de confidentialité limité

Suivre les points d’entrée publics

Le src/index.ts épinglé exporte load, hashComponents, les types de composants et le registre des sources. L’API publique ne renvoie pas une promesse donnant une personne : elle expose un agent dont get() résout un résultat structuré. Gardez l’URL du commit avec la revue, car une branche mouvante peut réordonner les sources ou modifier les champs.

load() est asynchrone. Elle peut envoyer le monitoring d’installation, attend prepareForSources(), crée le chargeur des sources intégrées et renvoie un agent. La valeur par défaut monitoring = true est un fait du code source. Le fixture doit noter si l’option a été définie explicitement, sans décrire la valeur par défaut comme un événement réseau mesuré.

Examiner la collecte et le monitoring

src/agent.ts définit LoadOptions.monitoring et précise que false désactive une requête AJAX non personnalisée. L’implémentation échantillonne ce chemin et ouvre m1.openfpcdn.io/fingerprintjs/v${version}/npm-monitoring ; cette revue n’affirme pas qu’une requête a été envoyée. Une observation de source sûre consigne l’option, la ligne de code et la finalité documentée. Elle ne conserve ni en-têtes de requête, cookies, identifiants de compte, ni réponse d’un tiers.

monitoring: false est une observation de configuration, pas une garantie d’anonymat. La page peut encore collecter des composants et l’application peut envoyer sa propre télémétrie. Séparez l’option de la bibliothèque de la politique applicative et des journaux serveur. La documentation BotBrowser sur la cohérence de l’automatisation couvre les contrôles de page maîtrisés ; elle n’établit pas ce qu’un service fait d’un identifiant visiteur.

Conserver les états value et error

get() attend le chargeur de composants puis renvoie components. Le type d’un composant prévoit value ou error ; une capacité absente n’est donc pas équivalente à une valeur simplement égale à null. Un fixture limité peut consigner les noms des composants, leur état (value ou error) et la forme générale de la valeur. Il ne doit pas publier des pixels Canvas, des échantillons audio, des données de compte ni toutes les valeurs des composants.

Un relevé privé peut être :

{
  "fixtureId": "fpjs-source-01",
  "commit": "7a738d0e9920c7431b34aff24b345a21f9054855",
  "monitoringOption": "false",
  "componentStatus": { "canvas": "value", "fonts": "value", "webGlBasics": "error" },
  "hashAccess": "not-measured",
  "testedOn": "2026-10-29"
}

Le relevé distingue une erreur de composant d’un composant réussi dont la valeur a été expurgée. Le transfert de compatibilité devient exploitable sans transformer le relevé en profil réutilisable. Pour une comparaison navigateur connexe, consultez la vérification de l’empreinte du navigateur et l’intégrité des API navigateur entre realms.

Il convient de distinguer trois cas dans un rapport. Un composant peut se résoudre avec une valeur exploitable, avec une valeur vide ou proche de nulle, ou échouer et produire un résultat d’erreur. L’expurgation ajoute un quatrième cas : le test disposait d’une valeur mais a choisi de ne pas la conserver. Si le relevé regroupe ces cas sous « absent », on ne sait plus si le navigateur manque de l’API, si la source a renvoyé un vide légitime, si la source a échoué ou si la politique de confidentialité a retiré le détail.

Un relevé d’observation doit aussi avoir un responsable et une échéance de conservation. Gardez les valeurs brutes des composants hors des gestionnaires de tickets généraux, des échanges et des exports analytiques. Si un artefact plus riche est nécessaire pour diagnostiquer un défaut, limitez l’accès aux personnes qui traitent ce cas et supprimez l’artefact à la fin de l’enquête. Le petit relevé durable doit dire si le test a été exécuté et quels résultats grossiers différaient, non conserver une signature de navigateur de longue durée.

Suivre l’ordre des sources et les tâches asynchrones

src/sources/index.ts indique que les sources asynchrones sont placées en tête afin de s’exécuter en parallèle des autres. Le registre commence par userAgentData, fonts, domBlockers, fontPreferences, audio et screenFrame, puis passe à Canvas, l’écran, le stockage, la langue, le matériel et des sources liées aux politiques. Cette liste exacte est un détail d’implémentation de ce commit, pas une norme universelle d’empreinte navigateur.

Le fichier place webGlBasics et webGlExtensions à la fin, car certaines sources peuvent en affecter d’autres, notamment WebGL et Canvas. L’ordre fait donc partie de la provenance. Si un commit ultérieur déplace une source, comparez le commit et le premier composant modifié avant d’attribuer un nouveau condensat à un changement du navigateur.

La même discipline s’applique aux échecs de composants. Si webGlBasics signale une erreur, n’en déduisez pas que WebGL est globalement indisponible ni que toute la sortie en aval doit différer. Consignez le résultat du composant, les conditions du test et toute erreur directe du navigateur que le fixture autorisé expose. Sans trace d’exécution, qualifiez l’explication de possibilité fondée sur la source, pas de diagnostic.

Comprendre la provenance du condensat et le visitorId paresseux

hashComponents() trie les clés des composants, sérialise les valeurs ou le littéral error, échappe les séparateurs dans les noms et transmet la chaîne canonique à x64hash128. La fonction explique comment cette version de la bibliothèque dérive un condensat de l’objet des composants. Elle ne prouve pas que l’entrée est unique, stable, humaine ou acceptée par un tiers.

Le getter visitorId est paresseux. makeLazyGetResult() calcule immédiatement le niveau de confiance, mais n’appelle hashComponents(this.components) qu’au premier accès, puis met le résultat en cache. Un test qui ne lit jamais visitorId n’a pas exercé le chemin du condensat. Un test qui le lit deux fois a vérifié la réutilisation du cache, pas deux collectes indépendantes. Consignez hashAccess comme not-measured, first-read ou reused plutôt que d’inventer une conclusion d’exécution.

La confiance est un champ distinct de l’identifiant et doit se lire selon la signification documentée par l’implémentation. Ce n’est ni une probabilité calibrée qu’un résultat appartienne à une personne, ni un score qui garantit qu’un service l’acceptera. Gardez le calcul et la propriété paresseuse dans des notes séparées, afin qu’une lecture immédiate de la confiance ne soit pas décrite comme la preuve que l’identifiant a été consulté.

Créer une observation de source limitée

La commande suivante récupère la source épinglée et n’imprime que des lignes structurelles. C’est une observation de source publique, pas une exécution BotBrowser ni une requête vers un site protégé :

curl -fsSL https://raw.githubusercontent.com/fingerprintjs/fingerprintjs/7a738d0e9920c7431b34aff24b345a21f9054855/src/agent.ts | rg -n 'monitoring = true|hashComponents\(this.components\)|const components = await getComponents|request.open'

Une ligne correspondante confirme la présence de ces marqueurs d’implémentation dans le commit. Elle ne prouve pas qu’un navigateur les a exécutés. Pour des essais en exécution, conservez dans un relevé restreint la version du navigateur, le système, le cycle du profil, l’origine, l’option, l’état des composants, l’accès au condensat et la date. Ne changez qu’une entrée déclarée à la fois.

Définir la limite de confidentialité

Les recommandations W3C sur le fingerprinting traitent l’empreinte comme une question de confidentialité ; le glossaire MDN sur le fingerprinting en explique le concept général. Cet article ajoute la provenance des sources et des règles d’expurgation ; il ne prétend ni que FingerprintJS OSS est un détecteur complet ni que visitorId identifie une personne.

Séparez les questions de compatibilité et de confidentialité. Une erreur de composant peut expliquer un repli applicatif sans justifier la collecte de valeurs brutes. Si un contrôle de version n’a besoin que de la présence, de l’état et de l’accès au condensat, conservez ces champs et supprimez-les rapidement. Si une décision de service est importante, obtenez un résultat d’intégration autorisé au lieu d’extrapoler depuis cette revue des sources.

Une revue pratique de minimisation pose quatre questions avant d’exécuter un test. Quelle affirmation exige chaque champ ? La réponse peut-elle tenir dans un état ou une forme plutôt que dans la valeur ? Qui peut voir l’artefact ? Quand sera-t-il supprimé ? Si un champ ne répond pas à la première question, omettez-le. Si un état suffit, ne collectez pas une valeur très détaillée « au cas où ». Intégrez la date de conservation à la tâche de test au lieu d’en faire un rappel ultérieur.

Ne présentez pas une lecture d’implémentation comme une conclusion de conformité. Le code peut aider à situer un chemin de collecte et une option de configuration, mais les obligations légales dépendent du contexte, de la finalité, de la juridiction, du consentement et de l’application complète. Une revue de confidentialité doit partir du déploiement réel et de ses flux de données. Cet article se limite à expliquer la source citée et à proposer un relevé de diagnostic plus petit.

Practical conclusion

Épinglez le commit, distinguez la configuration monitoring d’une preuve réseau à l’exécution, gardez séparés les états value et error, et consignez l’accès au condensat paresseux. L’ordre des sources et le condensat canonique expliquent la provenance ; ils n’établissent ni identité, entropie, anonymat ni décision tierce.

Sources

Next reading

Consultez la vérification de l’empreinte du navigateur pour les contrôles de page maîtrisés et l’intégrité des API navigateur entre realms quand une même propriété est lue dans plusieurs contextes.

#FingerprintJS#Browser Fingerprinting#visitorId#confidentialité#Source Provenance

Cet article fait partie du guide : Qu'est-ce qu'une empreinte de navigateur ?

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.