Quelles sont les options disponibles pour détecter les robots d'exploration qui ne veulent pas être détectés?
(Je sais que les techniques de détection de listes permettront au programmeur intelligent de robots furtifs de créer une meilleure araignée, mais je ne pense pas que nous serons de toute façon capables de bloquer les robots intelligents furtifs, uniquement ceux qui font des erreurs.)
Je ne parle pas des bons robots d'exploration tels que googlebot et Yahoo! Slurp. Je considère un bot sympa s'il:
- s'identifie comme bot dans la chaîne de l'agent utilisateur
- lit le fichier robots.txt (et y obéit)
Je parle des mauvais robots d'exploration, qui se cachent derrière des agents utilisateurs courants, utilisent ma bande passante et ne me donnent jamais rien en retour.
Il y a quelques trappes qui peuvent être construites avec une liste mise à jour (merci Chris, gs) :
- Ajout d'un répertoire répertorié uniquement (marqué comme interdit) dans le fichier robots.txt,
- Ajout de liens invisibles (éventuellement marqués comme rel = "nofollow"?),
- style = "affichage: aucun;" sur le lien ou le conteneur parent
- placé sous un autre élément avec un z-index plus élevé
- détecter qui ne comprend pas la capitalisation,
- détecter qui essaie de publier des réponses mais échoue toujours au Captcha.
- détecter les requêtes GET vers des ressources POST uniquement
- détecter l'intervalle entre les demandes
- détecter l'ordre des pages demandées
- détecter qui demande (systématiquement) des ressources https via http
- détecter qui ne demande pas de fichier image (ceci en combinaison avec une liste d'agents utilisateurs de navigateurs connus capables d'images fonctionne étonnamment bien)
Certains pièges seraient déclenchés à la fois par des «bons» et des «mauvais» robots. vous pouvez les combiner avec une liste blanche:
- Ça déclenche un piège
- Il demande
robots.txt
? - Il ne déclenche pas un autre piège parce qu'il a obéi
robots.txt
Une autre chose importante ici est la suivante:
veuillez considérer les personnes aveugles utilisant un lecteur d'écran: donnez aux gens un moyen de vous contacter, ou résolvez un Captcha (sans image) pour continuer à naviguer.
Quelles méthodes existe-t-il pour détecter automatiquement les robots d'exploration essayant de se masquer en tant que visiteurs humains normaux?
Mise à jour
La question n'est pas: comment attraper chaque robot. La question est: comment puis-je maximiser les chances de détecter un robot d'exploration.
Certaines araignées sont vraiment bonnes, et analysent et comprennent en fait html, xhtml, css javascript, script VB etc ...
Je ne me fais aucune illusion: je ne pourrai pas les battre.
Vous seriez cependant surpris de la stupidité de certains robots. Avec le meilleur exemple de stupidité (à mon avis) étant: convertir toutes les URL en minuscules avant de les demander.
Et puis il y a tout un tas de robots qui ne sont tout simplement «pas assez bons» pour éviter les différentes trappes.
la source
Voir Project Honeypot - ils mettent en place des pièges à bots à grande échelle (et ont DNSRBL avec leurs adresses IP).
Utilisez des URL et du HTML compliqués:
En HTML, vous pouvez utiliser de nombreuses astuces avec des commentaires, des éléments CDATA, des entités, etc.:
la source
Une solution simple est de créer un lien et de le rendre invisible
Bien sûr, vous devriez vous attendre à ce que certaines personnes qui regardent le code source suivent ce lien juste pour voir où il mène. Mais vous pouvez présenter à ces utilisateurs un captcha ...
Les robots d'exploration valides suivraient bien sûr également le lien. Mais vous ne devez pas implémenter un rel = nofollow, mais recherchez le signe d'un robot d'exploration valide. (comme l'agent utilisateur)
la source
Une chose que vous n'avez pas listée, qui est couramment utilisée pour détecter les mauvais robots d'exploration.
Vitesse de frappe, les bons robots d'exploration du Web briseront leurs hits pour ne pas submerger un site de requêtes. Les mauvais feront l'une des trois choses suivantes:
En outre, certains programmes de navigation hors ligne accapareront un certain nombre de pages, je ne suis pas sûr du type de seuil que vous souhaitez utiliser pour commencer le blocage par adresse IP.
Cette méthode capturera également les programmes de mise en miroir comme fmirror ou wget.
Si le bot randomise l'intervalle de temps, vous pouvez vérifier si les liens sont traversés de manière séquentielle ou en profondeur, ou vous pouvez voir si le bot traverse une énorme quantité de texte (comme dans les mots à lire) dans un période de temps trop courte. Certains sites limitent également le nombre de demandes par heure.
En fait, j'ai entendu une idée quelque part, je ne me souviens pas où, que si un utilisateur obtient 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. Je n'ai jamais vu cela implémenté.
Mise à jour sur le masquage des liensEn ce qui concerne le masquage des liens, vous pouvez mettre un div sous un autre, avec CSS (en le plaçant en premier dans l'ordre de dessin) et éventuellement en définissant l'ordre z. Un bot ne pourrait pas ignorer cela, sans analyser tous vos javascript pour voir s'il s'agit d'un menu. Dans une certaine mesure, les liens à l'intérieur des éléments DIV invisibles ne peuvent pas non plus être ignorés sans que le bot analyse tout le javascript.
En prenant cette idée à son terme, 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 beaucoup de travail à mettre en œuvre.
la source
Une méthode simple de détection de bots dont j'ai entendu parler pour les formulaires est la technique de saisie 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. Ensuite, utilisez css dans un fichier externe pour le masquer. Ou si vous êtes vraiment paranoïaque, configurez quelque chose comme jquery pour masquer la zone de saisie lors du chargement de la page. Si vous faites cela correctement, j'imagine que ce serait très difficile à comprendre pour un robot. Vous savez que ces robots ont dans leur nature de tout remplir sur une page, surtout si vous donnez à votre entrée cachée un identifiant comme id = "fname", etc.
la source
Il n'est pas si simple de suivre les bonnes chaînes d'agent utilisateur. Les versions de navigateur vont et viennent. Faire une statistique sur les chaînes d'agent utilisateur par différents comportements peut révéler des choses intéressantes.
Je ne sais pas dans quelle mesure cela pourrait être automatisé, mais au moins c'est une chose différenciante.
la source
Non testé, mais voici une belle liste d'agents utilisateurs dont vous pourriez créer une expression régulière. Pourrait vous y conduire la plupart du temps:
Tiré de: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/
la source
Vous pouvez également vérifier les références. Aucune référence ne peut soulever la suspension du bot. Une mauvaise référence signifie certainement que ce n'est pas un navigateur.
Je ne ferais pas ça. Vous pouvez vous retrouver sur la liste noire de Google pour le référencement black hat :)
la source
Je travaille actuellement pour une entreprise qui scanne des sites Web afin de les classer. Nous recherchons également des logiciels malveillants sur les sites.
D'après mon expérience, les bloqueurs numéro un de notre robot d'exploration (qui utilise bien sûr un IE ou Firefox UA et n'obéit pas à robots.txt. Duh.) Sont des sites hébergeant intentionnellement des logiciels malveillants. C'est pénible car le site revient alors à un humain qui doit charger manuellement le site, le classer et le rechercher pour les logiciels malveillants.
Je dis juste qu'en bloquant les robots d'exploration, vous vous mettez en mauvaise compagnie.
Bien sûr, s'ils sont horriblement impolis et absorbent des tonnes de bande passante, c'est une autre histoire car alors vous avez une bonne raison.
la source
Les gens continuent de s'adresser aux robots d'exploration larges, mais pas aux robots d'exploration spécialisés pour votre site Web.
J'écris des robots d'exploration furtifs et s'ils sont construits individuellement, aucune quantité de pots de miel ou de liens cachés n'aura aucun effet - le seul véritable moyen de détecter les robots d'exploration spécialisés est d'inspecter les modèles de connexion.
Les meilleurs systèmes utilisent l'IA (par exemple Linkedin) utilisent l'IA pour résoudre ce problème.
La solution la plus simple consiste à écrire des analyseurs de journaux qui analysent les connexions IP et mettent simplement ces adresses IP en liste noire ou servent du captcha, au moins temporaire.
par exemple
si IP X est vu toutes les 2 secondes se connecter à
foo.com/cars/*.html
mais pas à d'autres pages, il s'agit probablement d'un bot ou d'un utilisateur expérimenté affamé.Alternativement, il existe divers défis javascript qui agissent comme une protection (par exemple le système anti-bot de Cloudflare), mais ceux-ci sont facilement résolus, vous pouvez écrire quelque chose de personnalisé et qui pourrait être suffisamment dissuasif pour que cela ne vaille pas l'effort du robot d'exploration.
Cependant, vous devez poser une question si vous êtes prêt à fausser les utilisateurs légitimes positifs et à leur présenter des inconvénients pour empêcher le trafic de robots. La protection des données publiques est un paradoxe impossible.
la source
réponse courte: si un programmeur de niveau intermédiaire sait ce qu'il fait, vous ne pourrez pas détecter un robot sans affecter l'utilisateur réel. Avoir vos informations publiquement, vous ne pourrez pas les défendre contre un robot d'exploration ... c'est comme le premier amendement à droite :)
la source