web-dev-qa-db-fra.com

Détecter les robots Web "furtifs"

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

(Je sais que les techniques de détection de liste permettront au programmeur intelligent de robots furtifs de créer une meilleure araignée, mais je ne pense pas que nous pourrons jamais bloquer les robots intelligents de furtivité, mais uniquement ceux qui font des erreurs.)

Je ne parle pas des robots Nice, tels que Googlebot et Yahoo! Slurp . Je considère un bot Nice si:

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

Je parle des bad crawlers, qui se cachent derrière des agents d’utilisateurs usuels, utilisent ma bande passante et ne me donnent jamais rien en retour.

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

  1. Ajouter un répertoire uniquement répertorié (marqué comme non autorisé) 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 indice z supérieur
  3. détecter qui ne comprend pas la capitalisation,
  4. détecter qui essaie de poster des réponses mais échoue toujours le Captcha.
  5. détecter les requêtes GET aux ressources POST uniquement
  6. détecter l'intervalle entre les demandes
  7. détecter l'ordre des pages demandées
  8. détecter qui demande (régulièrement) des ressources https sur http
  9. détecter qui ne demande pas de fichier image (ceci en combinaison avec une liste d'agents utilisateurs de navigateurs connus pour fonctionner en image fonctionne étonnamment bien)

Certains pièges seraient déclenchés à la fois par les «bons» et les «mauvais» bots… vous pouvez les combiner avec une liste blanche:

  1. Ça déclenche un piège
  2. Il demande robots.txt
  3. Cela ne déclenche pas un autre piège car il obéissait robots.txt

Une autre chose importante ici est:
Veuillez considérer les personnes aveugles utilisant un lecteur d'écran: donnez aux gens un moyen de vous contacter, ou résolvez un Captcha (non-image) pour continuer à naviguer.

Quelles méthodes sont là pour détecter automatiquement les robots Web en essayant de se masquer en tant que visiteurs humains normaux.

Mettre à jour
La question n’est pas: Comment attraper chaque robot. La question est la suivante: Comment puis-je maximiser les chances de détecter un robot? 

Certaines araignées sont vraiment bonnes et analysent et comprennent en fait les scripts html, xhtml, javascript css, VB, etc.
Je ne me fais pas d’illusions: je ne pourrai pas les battre.

Vous seriez cependant surpris de la stupidité de certains robots. Le meilleur exemple de stupidité (à mon avis) étant: convertissez toutes les URL en minuscules avant de les demander.

Et puis, il y a tout un tas de chenilles qui ne sont tout simplement pas «assez bonnes» pour éviter les diverses trappes.

106
Jacco

Il y a quelque temps, j'ai travaillé avec une petite société d'hébergement pour les aider à mettre en place une solution. Le système que j'ai développé a examiné les journaux de serveur Web pour détecter toute activité excessive provenant d'une adresse IP donnée et a établi des règles de pare-feu pour bloquer les contrevenants. Elle comprenait des listes blanches d'adresses/plages IP basées sur http://www.iplists.com/ , qui étaient ensuite mises à jour automatiquement en fonction des besoins en vérifiant les chaînes d'agent utilisateur revendiquées et, si le client se prétendait un araignée légitime. mais pas sur la liste blanche, il a effectué des recherches DNS/DNS inversé pour vérifier que l'adresse IP source correspond au propriétaire déclaré du bot. En tant que sécurité intégrée, ces actions ont été signalées à l’administrateur par courrier électronique, avec des liens vers la liste noire/liste blanche de l’adresse en cas d’évaluation incorrecte.

Je n’ai pas parlé à ce client depuis environ 6 mois, mais la dernière fois que j’ai entendu dire, le système fonctionnait assez bien.

Point secondaire: Si vous envisagez de mettre en place un système de détection similaire basé sur la limitation du taux d’accès, veillez à utiliser des totaux d’au moins une minute (et de préférence au moins cinq minutes). Je vois beaucoup de gens parler de ce genre de stratagèmes qui veulent bloquer toute personne dépassant 5 à 10 visites en une seconde, ce qui peut générer des faux positifs sur des pages contenant beaucoup d'images (à moins que les images ne soient exclues du décompte) et will génère des faux positifs lorsque quelqu'un comme moi trouve un site intéressant qu'il souhaite lire, il ouvre donc tous les liens dans des onglets pour les charger en arrière-plan pendant qu'il lit le premier.

15
Dave Sherohman

Voir Projet Honeypot - ils installent des pièges à bot à grande échelle (et ont DNSRBL avec leurs IP).

Utilisez des URL et des HTML complexes:

<a href="//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"> <!-->
14
Kornel

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 devriez vous attendre à ce que certaines personnes qui consultent le code source suivent ce lien simplement pour voir où il mène. Mais vous pouvez présenter à ces utilisateurs un captcha ...

Bien entendu, les robots d'exploration valides suivraient également le lien. Mais vous ne devriez pas implémenter un rel = nofollow, mais rechercher le signe d'un robot valide. (comme l'agent utilisateur)

9
Georg Schölly

Une chose que vous n'avez pas listée, qui est couramment utilisée pour détecter les mauvais robots.

Vitesse de frappe, les bons robots d'exploration sur le Web briseront leurs résultats pour ne pas inonder un site de requêtes. Les mauvais feront l'une des trois choses suivantes:

  1. appuyez sur les liens séquentiels les uns après les autres
  2. appuyez sur les liens séquentiels dans une séquence parallèle (2 ou plus à la fois).
  3. appuyer sur des liens séquentiels à un intervalle fixe

En outre, certains programmes de navigation hors connexion réduisent de plusieurs pages, je ne sais pas quel type de seuil vous souhaitez utiliser, pour commencer à bloquer par adresse IP.

Cette méthode détectera également les programmes de mise en miroir tels que fmirror ou wget.

Si le bot aléatoire l'intervalle de temps, vous pouvez vérifier si les liens sont traversés de manière séquentielle ou en profondeur d'abord, ou si le bot traverse une énorme quantité de texte (comme dans les mots à lire) dans un période 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 plus où, que si un utilisateur reçoit trop de données, en kilo-octets, il peut être présenté à un captcha lui demandant de prouver qu’il n’est pas un bot. Je n'ai jamais vu cela implémenté cependant.

En ce qui concerne le masquage des liens, vous pouvez placer une div sous une autre, avec CSS (en la plaçant en premier dans l'ordre des tirages) et éventuellement en définissant l'ordre z. Un bot ne pouvait pas ignorer cela, sans analyser tout votre javascript pour voir s'il s'agissait 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 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.

6
Chris

Une méthode de détection de bot simple pour les formulaires dont j'ai entendu parler est la technique de saisie cachée. Si vous essayez de sécuriser un formulaire, saisissez une entrée avec un identifiant qui a l'air tout à fait légitime. Puis utilisez css dans un fichier externe pour le cacher. 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 qu'il serait très difficile pour un bot de comprendre. Vous savez que ces bots ont la nature de tout remplir sur une page, surtout si vous donnez à votre entrée cachée un identifiant tel que id = "fname" etc.

4
Agile Noob

Non testé, mais voici une belle liste d’agents utilisateurs dont vous pourriez faire une expression régulière. Pourriez-vous obtenir la plupart du chemin là-bas:

ADSARobot|ah-ha|almaden|aktuelles|Anarchie|amzn_assoc|ASPSeek|ASSORT|ATHENS|Atomz|attach|attache|autoemailspider|BackWeb|Bandit|BatchFTP|bdfetch|big.brother|BlackWidow|bmclient|Boston\ Project|BravoBrian\ SpiderEngine\ MarcoPolo|Bot\ mailto:[email protected]|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Collector|Copier|Crescent|Crescent\ Internet\ ToolPak|Custo|cyberalert|DA$|Deweb|diagem|Digger|Digimarc|DIIbot|DISCo|DISCo\ Pump|DISCoFinder|Download\ Demon|Download\ Wonder|Downloader|Drip|DSurf15a|DTS.Agent|EasyDL|eCatch|ecollector|efp@gmx\.net|Email\ Extractor|EirGrabber|email|EmailCollector|EmailSiphon|EmailWolf|Express\ WebPictures|ExtractorPro|EyeNetIE|FavOrg|fastlwspider|Favorites\ Sweeper|Fetch|FEZhead|FileHound|FlashGet\ WebWasher|FlickBot|fluffy|FrontPage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go\!Zilla|Go!Zilla|Go-Ahead-Got-It|GornKer|gotit|Grabber|GrabNet|Grafula|Green\ Research|grub-client|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|http\ generic|HTTrack|httpdown|httrack|ia_archiver|IBM_Planetwide|Image\ Stripper|Image\ Sucker|imagefetch|IncyWincy|Indy*Library|Indy\ Library|informant|Ingelin|InterGET|Internet\ Ninja|InternetLinkagent|Internet\ Ninja|InternetSeer\.com|Iria|Irvine|JBH*agent|JetCar|JOC|JOC\ Web\ Spider|JustView|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|libwww|likse|Link|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|LWP|lwp-trivial|Mag-Net|Magnet|Mac\ Finder|Mag-Net|Mass\ Downloader|MCspider|Memo|Microsoft.URL|MIDown\ tool|Mirror|Missigua\ Locator|Mister\ PiX|MMMtoCrawl\/UrlDispatcherLLL|^Mozilla$|Mozilla.*Indy|Mozilla.*NEWT|Mozilla*MSIECrawler|MS\ FrontPage*|MSFrontPage|MSIECrawler|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|Net\ Vampire|NetZIP|NetZip\ Downloader|NetZippy|NEWT|NICErsPRO|Ninja|NPBot|Octopus|Offline\ Explorer|Offline\ Navigator|OpaL|Openfind|OpenTextSiteCrawler|OrangeBot|PageGrabber|Papa\ Foto|Packrat|pavuk|pcBrowser|PersonaPilot|Ping|PingALink|Pockey|Proxy|psbot|PSurf|puf|Pump|PushSite|QRVA|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|Robozilla|Rover|RPT-HTTPClient|Rsync|Scooter|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Seeker|Shai|Siphon|sitecheck|sitecheck.internetseer.com|SiteSnagger|SlySearch|SmartDownload|snagger|Snake|SpaceBison|Spegla|SpiderBot|sproose|SqWorm|Stripper|Sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Templeton|TrueRobot|TV33_Mercator|UIowaCrawler|UtilMind|URLSpiderPro|URL_Spider_Pro|Vacuum|vagabondo|vayala|visibilitygap|VoidEYE|vspider|Web\ Downloader|w3mir|Web\ Data\ Extractor|Web\ Image\ Collector|Web\ Sucker|Wweb|WebAuto|WebBandit|web\.by\.mail|Webclipping|webcollage|webcollector|WebCopier|webcraft@bea|webdevil|webdownloader|Webdup|WebEMailExtrac|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WEBMASTERS|WebMiner|WebMirror|webmole|WebReaper|WebSauger|Website|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|Whacker|whizbang|WhosTalking|Widow|WISEbot|WWWOFFLE|x-Tractor|^Xaldon\ WebSpider|WUMPUS|Xenu|XGET|Zeus.*Webster|Zeus [NC]

Extrait de: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/

3
Brian Armstrong

Ce n’est pas vraiment facile de suivre le rythme des bonnes chaînes d’agent utilisateur. Les versions du navigateur vont et viennent. Faire une statistique sur les chaînes de l'agent utilisateur en fonction de différents comportements peut révéler des choses intéressantes.

Je ne sais pas jusqu'où cela pourrait être automatisé, mais au moins c'est une chose qui différencie.

2
iny

Vous pouvez également vérifier les références. Aucune référence ne pourrait augmenter la suspition de bot. Une mauvaise référence signifie certainement que ce n'est pas un navigateur.

Ajout de liens invisibles (éventuellement marqués comme rel = "nofollow"?),

* style="display: none;" on link or parent container
* placed underneath another element with higher z-index

Je ne ferais pas ça. Vous pouvez vous retrouver sur la liste noire de Google pour le SEO Black Hat :)

1
Danubian Sailor

Je travaille actuellement pour une entreprise qui analyse des sites Web afin de les classer. Nous vérifions également les sites pour les logiciels malveillants.

D'après mon expérience, les bloqueurs numéro un de notre robot d'exploration de sites Web (qui utilise bien entendu un IE ou Firefox UA et n'obéissent pas à robots.txt. Duh.) Sont des sites hébergeant intentionnellement des programmes malveillants. C'est pénible car le site retombe ensuite sur un humain qui doit le charger manuellement, le classer et le rechercher.

Je dis simplement que, en bloquant les robots d'indexation, vous vous mettez en mauvaise compagnie.

Bien sûr, s’ils sont horriblement impolis et absorbent des tonnes de votre bande passante, c’est une autre histoire, car vous avez une bonne raison.

0
Zan Lynx

Les gens continuent de s’adresser aux robots larges mais pas aux robots 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 un effet quelconque - le seul moyen réel de détecter des robots spécialisés consiste à 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 se contentent de mettre ces adresses en liste noire ou de servir captcha, au moins de manière temporaire. 

par exemple.
si IP X est vu toutes les 2 secondes se connectant à foo.com/cars/*.html mais pas à d’autres pages - c’est très probablement un bot ou un utilisateur chevronné.

Alternativement, divers défis javascript agissent en tant que protection (par exemple, le système anti-bot de Cloudflare), mais ceux-ci sont faciles à résoudre, vous pouvez écrire quelque chose de personnalisé et qui pourrait être suffisamment dissuasif pour que cela ne vaille pas l'effort du robot.

Cependant, vous devez poser une question si vous êtes prêt à falsifier les utilisateurs légitimes et à leur présenter des inconvénients pour éviter le trafic de bot. Protéger les données publiques est un paradoxe impossible.

0
Granitosaurus