113 votes

Détection des robots d'exploration du Web "furtifs".

Quelles sont les options disponibles pour détecter les robots d'exploration du Web qui ne veulent pas être détectés ?

(Je sais que l'établissement d'une liste des techniques de détection permettra au programmeur d'araignée furtive intelligent de fabriquer une meilleure araignée, mais je ne pense pas que nous serons jamais en mesure de bloquer les araignées furtives intelligentes de toute façon, seulement celles qui font des erreurs).

Je ne parle pas des gentils crawlers tels que googlebot et Yahoo ! Slurp. Je considère qu'un bot est sympa s'il :

  1. s'identifie comme un robot dans la chaîne de caractères de l'agent utilisateur.
  2. lit le fichier robots.txt (et y obéit)

Je parle de la mauvais des robots d'exploration, qui se cachent derrière des agents utilisateurs courants, utilisent ma bande passante sans jamais rien me donner en retour.

Il y a quelques trappes qui peuvent être construites liste mise à jour (merci Chris, gs) :

  1. Ajout d'un répertoire uniquement listé (marqué comme disallow) dans le fichier robots.txt,
  2. Ajout de liens invisibles (éventuellement marqués comme rel="nofollow" ?),
    • style="display : none ;" sur le lien ou le conteneur parent
    • placé sous un autre élément avec un z-index plus élevé
  3. détecter qui ne comprend pas le CaPiTaLiSaTioN,
  4. détecter qui essaie de poster des réponses mais échoue toujours au Captcha.
  5. détecter les demandes GET vers des ressources POST seulement
  6. détecter l'intervalle entre les demandes
  7. détecter l'ordre des pages demandées
  8. détecter qui demande (systématiquement) des ressources https plutôt que http
  9. détecter qui ne demande pas de fichier image (en combinaison avec une liste d'agents utilisateurs de navigateurs connus pour leur capacité à fournir des images, cela fonctionne étonnamment bien).

Certains pièges seraient déclenchés à la fois par les "bons" et les "mauvais" bots. Vous pourriez les combiner avec une liste blanche :

  1. Il déclenche un piège
  2. Il demande robots.txt ?
  3. Il ne déclenche pas un autre piège parce qu'il a obéi. robots.txt

Une autre chose importante ici est :
Tenez compte des personnes aveugles qui utilisent un lecteur d'écran : donnez-leur un moyen de vous contacter, ou résolvez un Captcha (sans image) pour continuer à naviguer.

Quelles sont les méthodes permettant de détecter automatiquement les robots d'exploration du Web qui tentent de se faire passer pour des visiteurs humains normaux ?

Mise à jour
La question n'est pas : Comment puis-je attraper chaque chenille. La question est la suivante : Comment puis-je maximiser les chances de détecter un crawler.

Certains spiders sont vraiment bons, et analysent et comprennent réellement le html, xhtml, css javascript, VB script etc...
Je ne me fais pas d'illusions : Je ne pourrai pas les battre.

Vous seriez cependant surpris de la stupidité de certains crawlers. Le meilleur exemple de stupidité (à mon avis) est le suivant : mettre toutes les URL en minuscules avant de les demander.

Et puis il y a toute une série de crawlers qui ne sont tout simplement "pas assez bons" pour éviter les différentes trappes.

18voto

Dave Sherohman Points 25122

Il y a quelque temps, j'ai travaillé avec une petite société d'hébergement pour l'aider à mettre en œuvre une solution à ce problème. Le système que j'ai développé examinait les journaux des serveurs web pour détecter toute activité excessive provenant d'une adresse IP donnée et émettait des règles de pare-feu pour bloquer les contrevenants. Il comprenait des listes blanches d'adresses IP/plages basées sur http://www.iplists.com/ Si le client prétendait être une araignée légitime mais ne figurait pas sur la liste blanche, il effectuait des recherches DNS/reverse-DNS pour vérifier que l'adresse IP source correspondait au propriétaire déclaré du robot. Par mesure de sécurité, ces actions étaient signalées à l'administrateur par courrier électronique, avec des liens permettant de mettre l'adresse sur liste noire/blanche en cas d'évaluation incorrecte.

Je n'ai pas parlé à ce client depuis 6 mois environ, mais, aux dernières nouvelles, le système fonctionnait très bien.

Remarque : si vous envisagez de mettre en place un système de détection similaire basé sur la limitation du taux de réussite, veillez à utiliser des totaux d'au moins une minute (et de préférence d'au moins cinq minutes). Je vois beaucoup de personnes qui parlent de ce genre de système et qui veulent bloquer tous ceux qui dépassent 5 à 10 visites en une seconde, ce qui peut générer de faux positifs sur les pages à forte teneur en images (à moins que les images ne soient exclues du décompte). sera générer des faux positifs lorsque quelqu'un comme moi trouve un site intéressant qu'il veut lire en entier, alors il ouvre tous les liens dans des onglets pour les charger en arrière-plan pendant qu'il lit le premier.

5 votes

Je trouve que les faux positifs dus au blocage des robots d'indexation détruisent totalement le trafic web. En fait, vous faites chier 99,8 % de vos utilisateurs en essayant de bloquer les robots d'exploration qui peuvent facilement contourner la méthode naïve décrite. Ce n'est jamais une bonne idée de refuser l'accès à un utilisateur ou de l'entraver, car cela détruit l'expérience de l'utilisateur sur votre site.

15voto

porneL Points 42805

Ver Projet Honeypot - ils mettent en place des pièges à robots à grande échelle (et ont des DNSRBL avec leurs IP).

Utilisez des URL et des codes HTML compliqués :

<a href="http://stackoverflow.com//example.com/"> = http://example.com/ on http pages.
<a href="page&amp;&#x23;hash"> = page& + #hash

En HTML, vous pouvez utiliser de nombreuses astuces avec des commentaires, des éléments CDATA, des entités, etc :

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->

10voto

Georg Schölly Points 63123

Une solution simple consiste à créer un lien et à le rendre invisible.

<a href="iamabot.script" style="display:none;">Don't click me!</a>

Bien sûr, vous devez vous attendre à ce que certaines personnes qui regardent le code source suivent ce lien juste pour voir où il mène. Mais vous pourriez présenter à ces utilisateurs un captcha...

Les robots d'exploration valides suivront bien sûr aussi le lien. Mais vous ne devez pas mettre en œuvre un rel=nofollow, mais rechercher le signe d'un crawler valide. (comme l'agent utilisateur)

1 votes

À moins que le robot ne vérifie les attributs CSS du lien et ne suive pas le lien parce qu'il n'est pas visible pour un utilisateur humain...

1 votes

L'étiquetage du lien "NE PAS cliquer sur moi" serait une meilleure idée Si quelqu'un a le CSS désactivé (ou pas de support CSS), le lien sera visible

0 votes

Bonne idée. Peut-être changer le texte en "." et le style css pour qu'il corresponde à l'arrière-plan - le rendant invisible pour la plupart des utilisateurs ? Ou, lancer un script pour le masquer après 1 seconde, le laissant seulement visible à un bot qui ne peut pas lier la commande javascript de masquage au lien ?

7voto

Chris Points 2432

Il y a une chose que vous n'avez pas mentionnée et qui est couramment utilisée pour détecter les mauvais crawlers.

Vitesse d'accès : les bons robots d'indexation répartissent leurs accès de manière à ne pas inonder un site de requêtes. Les mauvais feront l'une des trois choses suivantes :

  1. frapper les liens séquentiels l'un après l'autre
  2. frapper des liens séquentiels dans une séquence parallèle (2 ou plus à la fois).
  3. frapper des liens séquentiels à un intervalle fixe

De plus, certains programmes de navigation hors ligne absorbent un certain nombre de pages, je ne suis pas sûr du seuil que vous voudriez utiliser pour commencer à bloquer par adresse IP.

Cette méthode permet également de repérer les programmes de mise en miroir comme fmirror ou wget.

Si le robot randomise l'intervalle de temps, vous pouvez vérifier si les liens sont parcourus de manière séquentielle ou en profondeur d'abord, ou vous pouvez voir si le robot parcourt une grande quantité de texte (comme les mots à lire) dans une période de temps trop courte. Certains sites limitent également le nombre de requêtes par heure.

En fait, j'ai entendu une idée quelque part, je ne sais plus où, selon laquelle si un utilisateur reçoit trop de données, en termes de kilo-octets, on peut lui présenter un captcha lui demandant de prouver qu'il n'est pas un robot. Mais je n'ai jamais vu cette idée mise en œuvre.

Mise à jour sur le masquage des liens

Pour ce qui est de masquer les liens, vous pouvez placer un div sous un autre, à l'aide de CSS (en le plaçant en premier dans l'ordre de tirage) et éventuellement en définissant l'ordre z. Un robot ne pourrait pas ignorer cela, sans analyser tout votre javascript pour voir s'il s'agit d'un menu. Dans une certaine mesure, les liens à l'intérieur d'éléments DIV invisibles ne peuvent pas non plus être ignorés sans que le robot n'analyse tout le javascript.

Pour aller jusqu'au bout de cette idée, un javascript non appelé qui pourrait potentiellement montrer les éléments cachés pourrait tromper un sous-ensemble de robots d'analyse javascript. Et ce n'est pas un gros travail à réaliser.

17 votes

Défaut majeur des méthodes "ignorer JavaScript signifie que vous êtes un bot" : Certains d'entre nous utilisent le plugin NoScript. Aucun site n'exécute JavaScript sur moi, à moins que je n'établisse une liste blanche du site et que je sois pratiquement sûr de ne pas être un bot.

2 votes

Les robots peuvent exécuter du javascript maintenant... on est en 2013, bon sang. tout l'argument s'envole. qui a dit que les robots visitent les sites de manière séquentielle ? encore une énorme supposition.

1 votes

Le javascript ne servait qu'à afficher un lien vers un pot de miel. L'idée est que les robots sera analyser le javascript qui rendra visible le lien d'un pot de miel, ce qui les incitera à suivre le lien. Cependant, pour un utilisateur réel, le code qui rend le lien visible ne sera jamais exécuté. Par conséquent, les utilisateurs de NoScript, ainsi que toute personne qui n'exécute pas de fonctions au hasard, n'ont pas de problème. Cela dit, je ne suis pas sûr de savoir pourquoi/comment un bot exécuterait du code au hasard, et s'il faisait une analyse statique pour déterminer si un élément peut devenir visible, ce serait un bot très sophistiqué.

4voto

Agile Noob Points 847

Une méthode simple de détection des robots dont j'ai entendu parler pour les formulaires est la technique de l'entrée cachée. Si vous essayez de sécuriser un formulaire, mettez une entrée dans le formulaire avec un identifiant qui semble tout à fait légitime. Utilisez ensuite des css dans un fichier externe pour la cacher. Ou si vous êtes vraiment paranoïaque, configurez quelque chose comme jquery pour cacher la zone de saisie au chargement de la page. Si vous faites ça bien, j'imagine que ce serait très difficile pour un robot de le découvrir. Vous savez que ces robots ont pour habitude de tout remplir sur une page, surtout si vous donnez à votre entrée cachée un identifiant comme id="fname", etc.

2 votes

Pas si les robots sont capables d'attendre que le jquery se termine, comme un navigateur ordinaire. Cela aurait bien fonctionné au début des années 2000.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X