Pourquoi un seul signal bizarre ne condamne pas
Une sonde sur un ensemble public de règles : un signal d’environnement à 0.7 ne condamne pas, alors qu’une contradiction entre couches suffit.
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 permet de rejouer un fixture de même origine autorisé sous un profil déclaré et de garder une trace bornée des signaux qu’une page a exposés, mais il ne peut pas faire peser un signal d’environnement plus lourd que l’ensemble de règles ne l’autorise, ne peut pas transformer un signal corroborant en signal condamnatoire, et ne peut pas empêcher une contradiction côté réseau de décider du verdict avant que la page ait fini de charger. Cette revue lit un ensemble public de règles comme des données, reproduit son arithmétique de score et consigne quelles catégories peuvent condamner, pourquoi un signal de poids 0.7 s’arrête sous le verdict à lui seul, ce qu’une règle d’artefact ajoute aux mêmes signaux, et comment une seule contradiction entre couches franchit la ligne de condamnation par elle-même.
Résumé
- L’ensemble contient 126 règles en sept catégories, et seules trois peuvent condamner :
coherence,automationetartifact. Les quatre autres ne font que corroborer. - Une page peut déclencher 95 des 126 règles, ce qui veut dire que les 31 règles de réseau et de réputation ne s’exécutent jamais dans un contrôle côté navigateur.
- Un signal d’environnement de poids 0.7 donne 0.7 et reste
suspicious, parce qu’une règle d’environnement ne peut pas condamner, quelle que soit sa lourdeur. - Deux signaux d’environnement ensemble donnent 0.865 et restent
suspicious, ce qui montre que c’est la porte de catégorie, et non l’arithmétique, qui tient la ligne. - Ajouter une règle d’artefact à ces deux signaux produit 0.96 et
bot, les poids d’environnement restant inchangés. - Un signal d’automatisation de poids 0.9 condamne à lui seul, donc une page qui laisse fuir
navigator.webdrivern’a aucune marge. - Seules 14 des 126 règles couvrent plus d’une couche, et ce sont celles dont le poids est amplifié : 0.7 devient 1.0.
- Le score ne dépend pas de l’ordre des règles, donc une trace doit nommer lesquelles ont été déclenchées plutôt que combien.
Sommaire
- Quelles catégories peuvent condamner
- Pourquoi un signal d’environnement lourd s’arrête en route
- Où se trouve vraiment la ligne de condamnation
- Combien vaut une contradiction entre couches
- Consigner une lecture de verdict
Quelles catégories peuvent condamner
Un détecteur à base de règles est une liste d’affirmations sur un visiteur, chacune portant un poids et une catégorie, et la catégorie décide de ce qu’une règle déclenchée est autorisée à faire. L’ensemble que lit la sonde compte 126 règles en sept catégories :
categories -> coherence=49 automation=24 artifact=15 behavioral=7 reputation=4 environment=26 prevalence=1
convicting -> coherence,automation,artifact (others corroborate only)
Trois catégories peuvent condamner, les quatre autres ne font qu’ajouter au score. Ce partage est tout le dispositif. Une règle environment décrit une surface qui paraît mince, comme une courte liste de plugins, une liste de voix absente ou une concurrence matérielle très en dessous de la capacité de la machine. Ces surfaces sont réellement minces chez beaucoup de visiteurs légitimes : une image de poste de travail allégée, une compilation d’entreprise verrouillée, un navigateur sans périphérique audio. En traiter une comme une preuve étiquetterait à tort ces visiteurs, donc l’ensemble les laisse monter le score et s’arrête là. Une bibliothèque de détection qui nomme ses propres composants fait la même distinction : registre de détecteurs et états de composants de BotD consigne comment un détecteur nommé rapporte ce qu’il a observé plutôt qu’un score unique.
La catégorie behavioral fonctionne de la même façon. Une page statique qu’un lecteur regarde simplement produit peu ou pas d’entrée, donc une règle sur l’entropie des frappes ou la trajectoire du pointeur ne distingue pas une personne qui lit d’un pilote qui n’a rien injecté. L’ensemble marque ces signaux comme corroborants pour la même raison.
Une règle d’automation est d’une autre nature. Que navigator.webdriver soit vrai, que l’état Runtime.enable de CDP soit visible ou que l’agent utilisateur porte un témoin sans tête décrit quelque chose qu’une session de navigation normale ne fait pas. Ce ne sont pas des surfaces minces que des visiteurs légitimes possèdent parfois ; ce sont des états qu’un navigateur n’atteint que lorsqu’un pilote le tient. L’ensemble peut donc les laisser condamner.
artifact couvre le cas où la page se contredit elle-même : une fonction native dont le texte source n’est pas celui du moteur, un Worker qui rapporte des valeurs différentes de la page principale, un canevas qui échoue à sa propre invariant. Chacun est une incohérence interne plutôt qu’une surface mince, et c’est pourquoi il peut condamner.
coherence est la catégorie des deux couches en désaccord, et c’est la plus grande avec 49 règles. Une poignée de main TLS qui implique un système d’exploitation alors que l’agent utilisateur en revendique un autre est une contradiction entre ce que dit la connexion et ce que dit la page. Aucun visiteur légitime ne produit cela, parce que les deux couches sont générées par le même client.
Pourquoi un signal d’environnement lourd s’arrête en route
Ce qui est intéressant, c’est ce que la porte fait à une règle d’environnement lourde. La sonde prend quatre signaux d’environnement et note chacun seul :
alone:br.webgl_not_angle -> weight=0.55 category=environment score=0.55 verdict=suspicious
alone:br.font_linux_leak -> weight=0.7 category=environment score=0.7 verdict=suspicious
alone:br.screen_zero -> weight=0.7 category=environment score=0.7 verdict=suspicious
alone:br.voices_empty -> weight=0.5 category=environment score=0.5 verdict=suspicious
Les règles de poids 0.7 franchissent la ligne de suspicion à 0.35 et s’arrêtent à 0.7, juste sous la ligne de condamnation à 0.65 parce que la porte refuse. Lus seuls, les chiffres ressemblent à un constat fort ; lu avec la catégorie, c’est une surface qui peut simplement être mince.
Cette distinction compte quand une équipe lit un rapport qui dit « suspect ». Une étiquette de suspicion issue d’un signal d’environnement dit que la page a paru inhabituelle d’une manière précise et nommée. Elle ne dit pas que la page était automatisée, et un rapport qui imprime le score sans la catégorie invite exactement à cette mauvaise lecture. Un 0.7 n’est pas « 70 % du chemin vers une condamnation » ; c’est une observation corroborante qui a atteint le plafond que sa catégorie autorise.
La même sonde montre qu’empiler des signaux d’environnement n’arrange rien :
environment-pair -> weights=0.55+0.7 score=0.865 verdict=suspicious convicting=false
Deux règles d’environnement se combinent à 0.865 par la formule noisy-or, bien au-dessus de 0.65, et le verdict reste suspicious. Le convicting=false imprimé en est la raison : aucune règle déclenchée n’appartient à une catégorie condamnatoire, donc le score peut monter et l’étiquette non. C’est un choix de conception délibéré, et celui que les équipes comprennent le plus souvent de travers lorsqu’elles supposent qu’un nombre plus élevé signifie une conclusion plus forte.
La conséquence pratique porte sur l’endroit où investir. Si un déploiement n’est signalé que par des signaux d’environnement, durcir les surfaces que ces règles décrivent est une bataille perdue, parce que les règles sont conçues pour accepter les environnements minces comme normaux. l’effort revient aux catégories condamnatoires : garder propres navigator.webdriver et l’état CDP, et faire rapporter les mêmes valeurs à chaque realm.
Où se trouve vraiment la ligne de condamnation
La sonde ajoute une règle d’une catégorie condamnatoire à ces deux signaux d’environnement et le verdict bascule :
plus-artifact -> score=0.96 verdict=bot convicting=true categories=environment,environment,artifact
Rien n’a changé dans les signaux d’environnement. Les deux règles qui donnaient 0.865 donnent toujours autant, et une troisième porte le total à 0.96 et l’étiquette à bot, parce que convicting est maintenant vrai. Les poids d’environnement n’ont jamais été le facteur décisif ; la présence d’une règle d’une catégorie condamnatoire l’était.
Les cas à un seul signal disent la même chose depuis l’autre côté :
alone:br.webdriver_present -> weight=0.9 category=automation score=0.9 verdict=bot
alone:br.cdp_runtime_enabled -> weight=0.85 category=automation score=0.85 verdict=bot
alone:br.ch_he_headless -> weight=0.85 category=automation score=0.85 verdict=bot
Chacun condamne seul, avec un poids proche de 1 mais en dessous. Il n’y a aucune marge : une page qui laisse fuir navigator.webdriver est condamnée par un signal, et le seul retour possible est de ne pas le laisser fuir. Cette asymétrie est voulue, parce que l’ensemble traite un état d’automatisation comme un fait catégorique et non comme un indice probabiliste.
Empiler d’autres signaux corroborants fait monter le score sans changer l’étiquette :
stack -> one=0.9 two=0.955 three=0.987
Trois signaux portent le score à 0.987, et le verdict était déjà bot avec un. Un rapport qui montre 0.99 pour une page à trois constats et 0.9 pour une page à un suggère une différence de confiance que l’ensemble ne fait pas : les deux sont condamnées, et les signaux supplémentaires n’apportent presque rien à la décision. Le score résume combien de règles se sont déclenchées, et l’étiquette est une porte distincte.
Combien vaut une contradiction entre couches
La dernière pièce est l’amplification appliquée aux règles qui couvrent des couches :
cross-layer rules -> 14 of 126
amplify:net.tls_vs_ua_browser -> layers=network+browser weight=0.7 effective=1
amplify:net.h2_vs_ua_browser -> layers=network+browser weight=0.6 effective=0.9
amplify:net.datacenter_origin_proxied -> layers=network+browser+reputation weight=0.8 effective=1
Quatorze des 126 règles nomment plus d’une couche, et chacune voit son poids multiplié par 1.5, plafonné à 1. Une règle de 0.7 devient 1.0 et une de 0.6 devient 0.9. L’amplification est l’ensemble énonçant sa thèse en arithmétique : une contradiction entre deux couches générées indépendamment vaut plus qu’une lecture forte d’une seule couche, parce qu’un même client génère les deux et ne peut pas facilement les faire diverger exprès.
Une règle entre couches condamne seule :
amplify-alone:net.tls_vs_ua_browser -> score=1 verdict=bot
Une règle, un score de 1, un verdict bot. Pas besoin d’empiler, parce que la catégorie de la règle est coherence et que son poids amplifié atteint déjà le sommet de l’échelle. C’est la forme qu’une équipe doit le plus craindre : une seule configuration erronée, où le chemin réseau implique un système d’exploitation et le profil en revendique un autre, produit une condamnation à partir d’une observation.
Cela explique aussi pourquoi le chiffre de couverture côté navigateur compte :
coverage -> clientEvaluable=95 of 126, edge-only=31
layer:network -> rules=28 clientEvaluable=0
layer:reputation -> rules=4 clientEvaluable=0
Toute règle de réseau est réservée à la périphérie, donc une page qui charge un script détecteur dans un navigateur ne peut jamais exercer les règles entre couches qui portent les poids effectifs les plus élevés. Une équipe qui valide un profil en chargeant le détecteur dans le navigateur a contrôlé 95 règles et laissé intactes les 31 qui peuvent condamner à partir d’une observation. Les deux moitiés répondent à des questions différentes, et une exécution propre côté navigateur n’est pas une preuve sur la périphérie. Quand la valeur d’un en-tête contredit ce que la page rapporte, la règle compare deux sources indépendantes, ce que client hints et la limite de 500 caractères décrit. La surface d’en-têtes qu’un analyseur lit est l’une des valeurs côté navigateur qu’une règle de cohérence compare, et client hints et la limite de 500 caractères la consigne en détail.
La dernière ligne écarte un raccourci :
order-free -> forward=0.887 reverse=0.887 same=true
Les mêmes trois règles donnent le même score dans n’importe quel ordre, parce que la combinaison est un produit sur les poids et non une séquence. Un rapport ne peut donc pas dire quelle règle a compté en montrant le score seul, et la seule façon de le savoir est de nommer les règles déclenchées, leurs catégories et leurs couches. Un compte de constats est la forme la moins informative de ces mêmes données.
Consigner une lecture de verdict
Une lecture de verdict étaye une affirmation bornée : cette version de l’ensemble, ces règles déclenchées ont produit ce score et cette étiquette. Quatre champs la gardent vérifiable :
- La version de l’ensemble et son empreinte, parce qu’une mise à jour peut changer un poids, une catégorie ou l’ensemble condamnatoire, et les mêmes signaux donneraient alors un autre score.
- Les règles déclenchées avec leur catégorie et leurs couches, parce que l’étiquette dépend de la présence d’une règle capable de condamner, et le score le cache.
- La limite de couverture, parce qu’une exécution côté navigateur ne voit jamais les règles réservées à la périphérie qui portent les poids effectifs les plus élevés.
- Le score et l’étiquette ensemble, parce qu’un 0.99 avec des signaux corroborants et un 0.9 avec un signal condamnatoire sont le même verdict, et un rapport qui n’imprime que le score suggère une certitude que la porte n’a jamais accordée.
Sources publiques
- MDN : Navigator.webdriver
- MDN : WebGLRenderingContext.getParameter()
- RFC 8446 : TLS 1.3
- RFC 9113 : HTTP/2
- BotBrowser : référence de cohérence d’automatisation
Conclusion pratique
Lisez le verdict d’un détecteur par règle et par catégorie, pas par score : le 0.7 d’une règle d’environnement et le 0.7 d’une règle d’automation sont le même nombre et des constats entièrement différents. Traitez une étiquette de suspicion construite uniquement sur des signaux d’environnement comme la description d’une surface mince, et portez l’effort de durcissement sur les catégories condamnatoires, où une seule fuite décide du verdict. Rappelez-vous qu’une exécution côté navigateur couvre les règles qu’une page peut évaluer et laisse les règles entre couches, dont le poids est amplifié jusqu’au sommet de l’échelle, entièrement hors de vue, donc un résultat propre dans la page ne dit rien de la connexion qu’a utilisée le client. La mécanique de score de cette analyse se lit avec la lecture signal par signal de fonctions natives remplacées et ce que voit une liste de toString, et la cohérence entre realms qui empêche une règle coherence de se déclencher est traitée dans intégrité des API entre realms.
Cet article fait partie du guide : Qu'est-ce qu'une empreinte de navigateur ?
Articles Connexes
BotD : quels détecteurs s’exécutent vraiment
Empreinteua-parser-js : Client Hints, bots et un plafond de 500
EmpreinteQu'est-ce que l'empreinte des polices ? Cohérence du texte
EmpreintePromise : ce qui échoue d’abord
EmpreinteDevice Memory API et performances web : indication mémoire
EmpreinteQu'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.