Récemment, j'ai aidé quelques clients à faire face à des attaques de crawlers, et j'ai découvert que beaucoup de gens pensaient que le CDN à haute défense fonctionnait bien, mais que les résultats étaient crawlés pour douter de la vie. Une station de commerce électronique a même été attaquée à travers la base de données des prix, les concurrents prennent directement les données pour faire de la tarification dynamique, le patron a presque sacrifié l'équipe technique au ciel.
Les CDN à haute défense peuvent en effet transporter des DDoS, mais pour faire face aux crawlers, il faut les utiliser de manière intelligente. J'ai testé et constaté que la simple restriction du flux IP ne peut pas empêcher les crawlers avancés - les personnes qui obtiennent par hasard un pool de proxy seront en mesure d'enfreindre vos règles. Pour que la stratégie soit vraiment efficace, il faut commencer par combiner l'identification de l'UA et la limitation de la fréquence.
La reconnaissance de l'UA ne consiste pas simplement à faire correspondre des mots-clés
De nombreuses équipes configurent leurs règles d'AU pour ne bloquer que les requêtes qui indiquent clairement ”Python” ou ”curl”. De nos jours, les crawlers les plus avancés sont capables de falsifier l'AU, par exemple en se faisant passer pour un navigateur grand public :
Pouvez-vous dire s'il s'agit d'une personne réelle ou d'un robot d'exploration rien qu'en regardant cela ? J'ai fait des tests sur CDN5 l'année dernière et le pourcentage de requêtes de crawler qui usurpaient l'UA était aussi élevé que 83%. La clé doit donc être le profil comportemental - une personne normale n'utiliserait pas l'UA de Chrome et demanderait pourtant l'interface API 10 fois par seconde.
Limites de fréquence pour jouer une stratégie dynamique
La fixation d'une règle rigide de ”5 requêtes par seconde” peut nuire aux utilisateurs normaux. En particulier lorsqu'il y a des promotions, la fréquence des utilisateurs réels montera également en flèche. J'ai mis en pratique l'algorithme de fréquence dynamique sur le nœud de 08Host :
Cet ensemble de configurations a permis à un site d'actualités de réduire le nombre de faux positifs de 921 TP3T, tandis que le taux d'interception du crawler a également été augmenté de 371 TP3T.
Dans le monde réel, une bibliothèque d'empreintes digitales doit être mise à jour en permanence !
Les crawlers apprennent aujourd'hui à faire pivoter l'AU, mais chacun d'entre eux possède encore des empreintes digitales. Par exemple, Puppeteer contient par défaut le mot HeadlessChrome, bien que de nos jours les crawlers avancés suppriment délibérément cette marque, mais les caractéristiques de l'exécution JavaScript peuvent encore être détectées.
La base de règles de détection que je maintiens sur la plateforme CDN07 contient plus de 1700 empreintes digitales, avec quelques ajouts récents :
Ces règles semblent simples, mais en réalité, chacune d'entre elles cache des leçons de sang et de larmes. Un client s'est fait berner par un crawler qui utilisait un ancien navigateur UA pour contourner les règles, et ce n'est finalement qu'en détectant les caractéristiques du navigateur que l'interception a réussi.
Les limites de fréquence doivent être conçues par couches
N'utilisez pas le même ensemble de règles de fréquence pour toutes les interfaces. L'interface de connexion présente un niveau de risque complètement différent de celui de la page détaillée du produit, et j'ai l'habitude de fixer trois niveaux de limites de fréquence pour mes clients :
Les ressources statiques sont assouplies à 50r/s, l'API est strictement contrôlée à 10r/s, et l'interface de connexion doit être limitée à 3r/s ou moins. Il est particulièrement important de protéger l'interface CAPTCHA - de nombreux robots d'exploration rafraîchiront violemment le CAPTCHA, ce qui doit être limité à 1r/10s.
Exemple de configuration sur CDN5 :
Ne jamais faire confiance à une liste blanche d'UA.
Certains programmes suggèrent de ne publier que les UA des navigateurs les plus courants, et cette approche unique ne manquera pas d'avoir des conséquences. Tant de robots d'exploration légitimes (moteurs de recherche, sites de comparaison de prix) ont besoin d'un traitement spécial de nos jours. J'ai vu un site bloquer Googlebot, ce qui a entraîné une chute du trafic naturel 40%.
La bonne chose à faire est de vérifier l'authenticité des robots d'indexation connus. Par exemple, Googlebot propose une méthode de vérification :
D'autres comme Bingbot ont des mécanismes de validation similaires, et cette partie doit être configurée manuellement et ne peut pas s'appuyer sur les règles par défaut du CDN.
La vérification de la signature du navigateur est l'arme ultime
Les robots d'exploration avancés sont désormais parfaitement capables de falsifier l'UA et l'IP et, en fin de compte, c'est l'empreinte digitale du navigateur qui permet de les identifier. Les caractéristiques de l'environnement du navigateur sont détectées par des défis JavaScript, comme la vérification que le fichier navigator.plugins est complet, que le moteur de rendu WebGL correspond, etc.
Sur CDN07, il peut être configuré comme suit :
Cette solution a été testée pour bloquer 99,9% headless browsers, mais attention à l'impact sur le référencement, il est préférable de mettre sur liste blanche les robots d'indexation connus.
N'oubliez pas de contrôler et d'itérer
La technologie des robots évolue constamment et les règles qui fonctionnaient le mois dernier peuvent ne plus fonctionner ce mois-ci. Un système de surveillance doit être mis en place pour garder un œil sur ces paramètres :
Pourcentage de demandes anormales, taux de déclenchement du CAPTCHA, distribution de la fréquence des demandes à travers les interfaces. J'ai l'habitude de faire du Kanban en temps réel sur Grafana et d'ajuster les règles immédiatement lorsque je trouve des anomalies.
On a récemment découvert que le nouveau crawler commençait à simuler la trajectoire de la souris, la prochaine fois qu'on parlera de la façon d'utiliser la biométrie comportementale pour se défendre. De nos jours, même les CDN doivent ”prévenir les coéquipiers” - certains crawlers se déguisent même en robots de surveillance des CDN !
Une protection vraiment efficace est toujours une combinaison de stratégies à plusieurs niveaux : la détection de l'AU pour éliminer les crawlers bas de gamme, les restrictions de fréquence pour empêcher les attaques intermédiaires et l'authentification du navigateur pour éliminer les joueurs avancés. Enfin, il existe une issue de secours - au cas où un utilisateur réel serait bloqué par erreur, il faut au moins donner aux gens un moyen de se plaindre.

