DataDome

Détecter Selenium Chrome

Table des matières

La détection côté client est essentielle pour fournir une détection de bots complète et précise. C’est ce qui permet à notre solution de détecter les navigateurs automatisés en une seule exécution de défi JS. Passons en revue une technique qui permet au moteur de détection de DataDome de détecter spécifiquement les navigateurs Chrome créés par le framework Selenium en utilisant la détection JavaScript (JS) côté client, également connue sous le nom de « browser fingerprinting ».

Qu’est-ce que Selenium ?

Sorti en 2004, Selenium est un framework populaire qui utilise du code pour piloter des navigateurs (comme Chrome, Firefox, Opera et Safari) afin d’exécuter automatiquement certaines actions (par exemple, cliquer sur un lien ou ajouter un produit à un panier).

Bien que certains développeurs de bots aient adopté des frameworks plus récents comme Puppeteer et Playwright, Selenium reste un choix courant.

Comment détecter Selenium Chrome

En détection de bots, vous pouvez utiliser un large éventail de techniques et de signaux, tels que l’analyse comportementale, l’empreinte TLS, les réputations de session et d’IP, pour différencier les humains des systèmes automatisés/ des bots.

Dans cet article, nous nous concentrons sur une technique qui permet à un site web de détecter spécifiquement Selenium Chrome, c’est-à-dire les navigateurs Chrome créés par le framework Selenium. La technique que nous abordons repose sur la détection JavaScript (JS) côté client, ou « browser fingerprinting ».

Une approche simple et bien connue pour détecter Selenium consiste à vérifier si navigator.webdriver est égal à true. Cependant, bien que navigator.webdriver = true indique la présence d’un bot, cela détectera également des bots instrumentés avec des technologies autres que Selenium, comme Puppeteer et Playwright. De plus, l’attribut navigator.webdriver = true peut désormais être facilement falsifié en utilisant le flag –disable-blink-features=AutomationControlled lors du démarrage de Chrome.

Il existe cependant une autre approche plus spécifique à Selenium Chrome, dans laquelle nous essayons de détecter les effets secondaires introduits par Selenium lui-même. Lorsque Selenium interagit avec une page web – que ce soit pour cliquer sur un élément, déplacer la souris ou exécuter du code JS dans le contexte de la page – il appellera la fonction JS getPageCache à un moment donné.

Un des effets secondaires de la fonction JS getPageCache est qu’elle définira un objet Cache dans l’objet document. On peut accéder à l’instance du cache peut être accédée via document.$cdc_asdjflasutopfhvcZLmcfl_.

Selenium Chrome Call Function

Vous vous demandez peut-être pourquoi les développeurs de Selenium ont choisi la chaîne $cdc_asdjflasutopfhvcZLmcfl_. Comme l’expliquent les développeurs dans un commentaire de code, c’est une longue chaîne qui est peu susceptible d’entrer en conflit ou d’avoir une collision avec un nom de propriété déjà existant défini dans le même contexte d’exécution JS.

Ainsi, tester la présence de document.$cdc_asdjflasutopfhvcZLmcfl_ peut révéler la présence de Selenium Chrome. (Notez que la propriété document.$cdc_asdjflasutopfhvcZLmcfl_ peut ne pas être présente au moment du chargement si le bot n’a pas encore interagi avec la page.)

Mon site web est-il sécurisé si je détecte Selenium Chrome ?

Cela dépend des protections que vous avez mises en place. Bien que la technique décrite ici vous permette de détecter la présence de bots automatisés avec Selenium et Chrome, les attaquants ont accès à un large éventail de bots utilisant d’autres navigateurs et frameworks d’instrumentation, tels que Puppeteer extra stealth.

De plus, plusieurs développeurs ont trouvé des moyens de contourner la technique de détection détaillée ici, le plus souvent soit en recompilant le binaire ChromeDriver pour remplacer la chaîne $cdc_asdjflasutopfhvcZLmcfl_ par une autre chaîne, soit simplement en remplaçant la chaîne dans le binaire compilé.

La modification des différents attributs « standard » pour éviter la détection est plus courante qu’on ne le pense, et impacte tous les secteurs d’activité, des sites de commerce électronique aux plateformes de streaming. Elle est utilisée par les bots pour mener des attaques de scraping, acheter des produits en édition limitée (scalping), manipuler des votes et augmenter le nombre de vues sur les plateformes de streaming.

Conclusion

La détection côté client est primordiale pour une détection rapide et précise des bots. Elle permet à notre moteur de détection de bots de détecter les navigateurs automatisés en une seule exécution de défi JS en recherchant des effets secondaires discriminants dans les empreintes de navigateurs.

Comme nous l’avons montré dans cet article, nous pouvons détecter les bots Chrome (Headless) automatisés avec Selenium en utilisant document.$cdc_asdjflasutopfhvcZLmcfl_, même si les bots essaient de cacher leur présence en supprimant navigator.webdriver = true en utilisant le flag –disable-blink-features=AutomationControlled lors du démarrage de Chrome.

Mais gardez à l’esprit que détecter et arrêter Selenium Chrome n’est pas suffisant pour sécuriser entièrement un site web contre les bots malveillants. Les attaquants d’aujourd’hui ont toujours accès à un large éventail de bots utilisant d’autres navigateurs et frameworks d’instrumentation, tels que Puppeteer extra stealth.