95% de taux de detection.
C’est le chiffre que ton vendor WAF t’a montre en demo. Voila contre quoi il a ete mesure.
Niveau 1 - le bot nu
Le bot en requests/curl. Pas de cookies. Pas de Sec-Fetch-Dest, pas de Sec-Fetch-Mode. Accept-Language absent. User-Agent par defaut ou vide. Fingerprint TLS identique sur des milliers de requetes. Timing fixe entre les requetes.
Ton WAF le bloque en 3 requetes. Normal - c’est comme detecter quelqu’un qui entre dans un aeroport sans pantalon.
Niveau 2 - le navigateur automatise
Il a les headers, les cookies, un UA correct. Mais navigator.webdriver est a true. 0 plugins. hardwareConcurrency a 1. window.chrome absent. L’ordre des headers ne matche pas le fingerprint TLS - un JA3 Chrome avec des headers dans l’ordre de Firefox, c’est un signal. Les frames Playwright ou CDP fuitent dans les stack traces.
Ton WAF le bloque. Encore relativement trivial.
Niveau 3 - le bot qui fait l’effort
webdriver patche. 3 plugins PDF. window.chrome stube. Headers dans le bon ordre. Cookies renvoyes. Mais le canvas hash change entre les sessions. Les parametres WebGL ne matchent pas le GPU declare. toString() sur les fonctions natives revele des overrides. La chaine de prototypes a des getters injectes qui n’existent pas sur un vrai Chrome.
C’est ici que le taux de detection commence a chuter.
Niveau 4 - le bot comportemental
Il passe les checks JS. Mais le coefficient de variation de ses mouvements souris est trop bas. Sa heatmap est un rectangle au lieu d’un F. Il scroll a vitesse constante sans jamais remonter. Son curseur est parfaitement statique pendant les pauses. Zero selection de texte. Zero changement d’onglet. Il crawle a 3h du matin au meme rythme qu’a 10h.
C’est ici que meme les bons WAF commencent a lacher.
Niveau 5 - le bot qui reproduit les distributions humaines
Timing log-normal entre les mouvements. Heatmap F-pattern avec la bonne entropie spatiale. Scroll avec inertie et micro-retours en arriere. Tremor gaussien pendant les pauses. Selection de texte sur 12% des pages. Canvas seede et persiste cross-session. toString masque jusqu’aux stack traces. 60+ signaux corriges.
On a construit cet outil. Il passe Akamai Content Protector.
A ce niveau, la majorite des WAF lachent. Pas tous. DataDome bloque encore - ce qui veut dire qu’ils exploitent des signaux qu’on n’a pas encore identifies. C’est un travail en cours.
Ce qui resiste vraiment
Ce qu’on sait, c’est que les signaux qui resistent le plus longtemps sont ceux qui vivent en dehors du navigateur :
- Le ratio HTML/assets dans les logs serveur - le bot ne charge que le HTML parce que charger toutes les ressources coute x25 en bande passante.
- Les metriques de fonts systeme -
measureText()depend du moteur de rendu de l’OS, pas du navigateur. Un headless Linux ne dessine pas les glyphes comme Windows. - L’empreinte TCP/TLS du kernel - geree par le systeme d’exploitation, pas par le JavaScript.
Pas du JavaScript. Pas du behavioral seul. Du physique et de l’economie.
Le chiffre de 95% mesure le niveau 1. La vraie question c’est pas “est-ce que ton WAF detecte les bots”.. c’est a partir de quel niveau il lache.
Teste contre quel niveau, ton 95% ?
