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
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_WEBGLetUNMASKED_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
- L'extension est facultative
- Recherche et paramètres sont des preuves distinctes
- Une chaîne renderer a une portée limitée
- Un relevé comparatif avec valeurs masquées
- Périmètre et limites de BotBrowser
- Practical conclusion
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.
| État | Observation minimale | Ce qui reste indéterminé |
|---|---|---|
not_requested | Aucune recherche | Disponibilité future du contexte ou de l'extension |
context_unavailable | Aucun contexte utilisable | Cause de l'échec de création |
extension_unavailable | Un contexte vivant renvoie null | Politique ou implémentation en cause |
parameter_missing | Paramètre absent ou refusé | Réglage de vie privée |
reported | Valeur obtenue et enregistrée | Identité 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 contexte | Résultat du contexte | Recherche d'extension | Résultat du paramètre | Interprétation sûre |
|---|---|---|---|---|
webgl | objet | objet | deux chaînes | Métadonnées facultatives reçues à cette phase |
webgl | objet | null | non exécuté | Extension indisponible; cause non résolue |
webgl2 | null | non exécutée | non exécuté | Échec avant toute preuve sur l'extension |
webgl2 | objet | objet | une exception | Lecture du paramètre en échec; extension non déclarée absente |
webgl | objet | objet | champ sérialisé vide | Vé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:
| Champ | Exemple | Motif de conservation |
|---|---|---|
contextRequest | webgl2 | Reconstruit la limite API demandée |
extensionState | reported | Distingue recherche et création du contexte |
vendorShape | string | Confirme le type sans garder la valeur |
rendererShape | string | Confirme le type du second appel |
taskOutcome | fallback-visible | Sépare l'impact utilisateur du diagnostic |
phase | after-context-create | Évite de mélanger les étapes du cycle de vie |
retention | redacted-after-validation | Rend 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érification | Entrée constante | Sortie observable | Limite d'interprétation |
|---|---|---|---|
| Demande de contexte | Canvas et nom demandé | objet ou null | Disponibilité de création seulement |
| Recherche d'extension | Même contexte et nom exact | objet ou null | Disponibilité d'interface facultative seulement |
| Paramètre vendor | Même objet d'extension | chaîne, exception ou champ absent | Une valeur diagnostique |
| Paramètre renderer | Même objet d'extension | chaîne, exception ou champ absent | Une autre valeur diagnostique |
| Sérialisation | Même relevé en mémoire | clé gardée, masquée ou omise | Transformation de l'application seulement |
| Tâche utilisateur | Même graphique ou solution de repli | terminée, repli ou interrompue | Ré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
- Khronos: WEBGL_debug_renderer_info
- MDN: WEBGL_debug_renderer_info
- MDN: getExtension()
- MDN: getParameter()
- BotBrowser: WebGL
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é.
Cet article fait partie du guide : Qu'est-ce qu'une empreinte de navigateur ?
Articles Connexes
Moteur de rendu WebGL absent : vie privée ou contexte ?
EmpreinteRapport WebGL BrowserLeaks : collecte et champs absents
Empreintewebgl_debug_renderer_info : ce que votre GPU révèle aux pages
EmpreinteRendu WebGL logiciel, replis de capacité et vie privée
EmpreinteRapport WebGL de CreepJS : contextes et signaux
EmpreinteFingerprinting WebGPU : la nouvelle génération de pistage GPU
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.