Retour au Centre de connaissances
Empreinte

WEBGL_debug_renderer_info : limites de vie privée et du renderer

Suivez la divulgation WebGL facultative, de la recherche d'extension à getParameter(), sans prendre la chaîne renderer pour l'identité d'un appareil.

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.

WEBGL_debug_renderer_info est une extension de diagnostic facultative. Elle peut exposer des chaînes vendor et renderer par getParameter(), mais ce n'est pas une API d'identité. Il faut distinguer l'opération exécutée, la valeur null et le besoin réel de l'application.

La documentation BotBrowser décrit des contrôles WebGL liés au profil : BotBrowser peut régler des surfaces graphiques déclarées pour une comparaison autorisée, mais ne peut pas garantir une étiquette de détecteur tiers. Elle ne transforme pas une extension absente en preuve d'un réglage, et un renderer présent ne prouve ni un GPU physique ni une personne. Cette limite est importante pour une analyse de détection ou de vie privée.

TL;DR

  • getExtension('WEBGL_debug_renderer_info') est distinct de la création du contexte WebGL.
  • L'extension définit UNMASKED_VENDOR_WEBGL et UNMASKED_RENDERER_WEBGL; les valeurs observées ne sont pas des identités.
  • null, une exception, un champ sérialisé vide et une chaîne reçue sont des états différents.
  • Une absence ne révèle ni préférence de vie privée, ni famille de navigateur, ni décision d'automatisation.
  • Conservez la phase de collecte et le résultat de la tâche avant une valeur brute.

Contents

Flux WebGL séparant contexte, recherche d'extension, paramètres renderer, absence et limites d'identité.

Le flux sépare les observations de l'API des interprétations de vie privée ou d'identité.

L'extension est facultative

La spécification Khronos définit des constantes supplémentaires. Un contexte peut fonctionner sans objet d'extension. Si la création du contexte échoue, la recherche n'a jamais eu lieu. MDN mentionne l'influence possible d'une politique de vie privée, mais ce cas documenté n'explique pas toute absence.

Un champ omis volontairement n'est pas une extension refusée. Une page qui ne lance aucune recherche doit conserver not_requested, et non extension_unavailable.

Recherche et paramètres sont des preuves distinctes

getExtension() renvoie un objet ou null pour le nom indisponible dans le contexte actuel. getParameter() intervient ensuite, avec les constantes de l'extension. Une exception, une constante invalide ou un sérialiseur fautif appartiennent à un champ d'erreur distinct.

ÉtatObservation minimaleCe qui reste indéterminé
not_requestedAucune rechercheDisponibilité future du contexte ou de l'extension
context_unavailableAucun contexte utilisableCause de l'échec de création
extension_unavailableUn contexte vivant renvoie nullPolitique ou implémentation en cause
parameter_missingParamètre absent ou refuséRéglage de vie privée
reportedValeur obtenue et enregistréeIdentité physique, humaine ou bot

Ces étiquettes appartiennent au journal de l'application, pas à WebGL. Elles rendent la comparaison vérifiable.

Une chaîne renderer a une portée limitée

La chaîne est une observation d'une API dans un contexte donné. Des couches partagées ou virtualisées peuvent donner le même nom. La valeur ne prouve donc ni un GPU physique, ni une personne, ni une décision anti-bot. La présence ne prouve pas que toutes les protections sont désactivées, et l'absence ne prouve pas qu'une protection est active.

L'analyse WebGL générale traite les combinaisons de surfaces; l'analyse des valeurs manquantes traite le cycle de vie. Pour une comparaison contrôlée, gardez canvas, contexte, version et phase constants, changez une condition et masquez la chaîne sauf nécessité de support.

Un relevé comparatif avec valeurs masquées

Ce JSON est un modèle d'application, pas une mesure BotBrowser:

{
  "applicationRelease": "support-ui-14",
  "context": "webgl2",
  "extensionLookup": "reported",
  "parameters": { "UNMASKED_VENDOR_WEBGL": "redacted", "UNMASKED_RENDERER_WEBGL": "redacted" },
  "taskOutcome": "visualization-complete",
  "collectionPhase": "after-context-create",
  "rawValueRetention": "not-retained"
}

Le modèle conserve la branche et le résultat visible. Si la recherche donne null, changez l'état sans réécrire le résultat. Un échec de contexte reste antérieur. Une chaîne seule ne révèle jamais la décision d'un détecteur.

Deux constantes, deux observations

La spécification nomme les constantes, mais ne définit pas de schéma analytique. Enregistrez chaque lecture sous une clé distincte; si un seul appel réussit, ne fabriquez pas la seconde valeur. WebGL 1 et WebGL 2 doivent aussi rester séparés. Un getContext('webgl2') réussi ne prouve pas que getContext('webgl') renverrait le même contexte ou exposerait la même extension. La référence MDN sur getContext décrit les conflits entre modes; cette précondition est distincte de la disponibilité de l'extension.

Une matrice d'incident peut conserver la limite de chaque étape:

Demande de contexteRésultat du contexteRecherche d'extensionRésultat du paramètreInterprétation sûre
webglobjetobjetdeux chaînesMétadonnées facultatives reçues à cette phase
webglobjetnullnon exécutéExtension indisponible; cause non résolue
webgl2nullnon exécutéenon exécutéÉchec avant toute preuve sur l'extension
webgl2objetobjetune exceptionLecture du paramètre en échec; extension non déclarée absente
webglobjetobjetchamp sérialisé videVérifier la sérialisation; la valeur API reste inconnue

La dernière ligne compte en production: JSON peut omettre undefined, une couche de masquage peut remplacer une valeur par "" et l'interface peut afficher un marqueur. Conservez l'état avant ces transformations. La phase modifie aussi la comparaison. La documentation MDN de l'événement webglcontextlost décrit une interruption du cycle de vie; isContextLost() vérifie cet état. Aucun de ces appels ne prouve qu'une extension soit définitivement indisponible. Étiquetez les phases avec des valeurs d'application telles que after-context-create, after-context-restore et fallback-render. Ne comparez pas un relevé avant la perte à un relevé pendant celle-ci comme s'il s'agissait de propriétés stables. Après restauration, les ressources peuvent devoir être recréées et la valeur mise en cache peut appartenir à une phase antérieure.

Masquage et revue reproductible

Une demande d'assistance peut seulement exiger de savoir si la recherche a eu lieu, si chaque constante a renvoyé une chaîne et si le graphique ou la solution de repli a abouti. Ces champs conservent ces faits sans créer d'identifiant matériel durable:

ChampExempleMotif de conservation
contextRequestwebgl2Reconstruit la limite API demandée
extensionStatereportedDistingue recherche et création du contexte
vendorShapestringConfirme le type sans garder la valeur
rendererShapestringConfirme le type du second appel
taskOutcomefallback-visibleSépare l'impact utilisateur du diagnostic
phaseafter-context-createÉvite de mélanger les étapes du cycle de vie
retentionredacted-after-validationRend la décision de vie privée vérifiable

La spécification Khronos fixe les noms et le contrat des paramètres; MDN décrit le comportement des méthodes. Aucune source ne prouve comment un site combine renderer, pixels, polices ou signaux réseau. Avant de modifier un collecteur, écrivez la branche attendue pour chaque opération, puis comparez les entrées et sorties:

VérificationEntrée constanteSortie observableLimite d'interprétation
Demande de contexteCanvas et nom demandéobjet ou nullDisponibilité de création seulement
Recherche d'extensionMême contexte et nom exactobjet ou nullDisponibilité d'interface facultative seulement
Paramètre vendorMême objet d'extensionchaîne, exception ou champ absentUne valeur diagnostique
Paramètre rendererMême objet d'extensionchaîne, exception ou champ absentUne autre valeur diagnostique
SérialisationMême relevé en mémoireclé gardée, masquée ou omiseTransformation de l'application seulement
Tâche utilisateurMême graphique ou solution de repliterminée, repli ou interrompueRésultat produit, pas une identité

Si la deuxième ligne renvoie null, les appels des paramètres n'ont pas eu lieu; les noter vides inventerait une mesure. Pour comparer navigateur ordinaire et automatisation, gardez contexte, extension et phase identiques. Une configuration déclarée peut être comparée à une branche observée; cette branche n'authentifie pas la configuration.

Périmètre et limites de BotBrowser

La documentation WebGL BotBrowser décrit les contrôles de profil : BotBrowser peut fournir des réglages graphiques déclarés pour une comparaison autorisée, sans garantir une étiquette de détecteur tiers. Khronos et MDN décrivent l'API, pas le profil BotBrowser. Une comparaison autorisée peut vérifier la journalisation de la branche; elle ne garantit ni étiquette tierce ni résultat identique sur chaque hôte.

FAQ

null signifie-t-il que WebGL est désactivé?

Non. Il concerne une extension facultative; la création du contexte est une autre vérification.

La chaîne identifie-t-elle un GPU?

Non. C'est une valeur d'API partageable, virtualisable ou masquée.

Faut-il la conserver en analytique?

Pas automatiquement. Conservez état, phase et résultat; la valeur brute exige un besoin de support explicite.

Sources

Practical conclusion

Traitez l'extension comme un chemin d'observation facultatif. Séparez création, recherche, paramètre et résultat de tâche. Une absence demande ses propres preuves; une valeur présente garde une portée étroite et ne devient pas une identité.

#Webgl#confidentialité#Renderer Information#signaux du navigateur#fingerprinting

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.