Détecter les robots d’indexation «furtifs»

Quelles options existe-t-il pour détecter les robots Web qui ne veulent pas être détectés?

(Je sais que les techniques de détection de listes permettront au programmeur de robots d’exploration furtive de faire une meilleure araignée, mais je ne pense pas que nous serons en mesure de bloquer les robots d’exploration furtive, uniquement ceux qui commettent des erreurs.)

Je ne parle pas des beaux robots tels que googlebot et Yahoo! Slurp. Je considère un bot sympa s’il:

  1. s’identifie en tant que bot dans la chaîne de l’agent utilisateur
  2. lit robots.txt (et y obéit)

Je parle des mauvais robots, se cachant derrière des agents utilisateurs communs, utilisant ma bande passante et ne me donnant 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. Ajouter des 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 z-index plus élevé
  3. détecter qui ne comprend pas la capitalisation,
  4. détecter qui essaie de poster des réponses mais toujours échouer le captcha.
  5. détecter les requêtes GET sur les ressources POST uniquement
  6. détecter l’intervalle entre les requêtes
  7. détecter l’ordre des pages demandées
  8. détecter qui (systématiquement) demande 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 compatibles avec l’image connus fonctionne étonnamment bien)

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

  1. Ça déclenche un piège
  2. Il demande des robots.txt ?
  3. Il ne faut pas déclencher un autre piège car il obéit à 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 existe-t-il pour détecter automatiquement les robots d’exploration Web qui tentent de se masquer en tant que visiteurs humains normaux?

Mettre à jour
La question n’est pas: comment attraper chaque robot. La question est de savoir comment optimiser les chances de détecter un robot.

Certains araignées sont vraiment bonnes, et parsingnt et comprennent le HTML, le HTML, le JavaScript, le script VB, etc.
Je n’ai aucune illusion: je ne pourrai pas les battre.

Vous seriez toutefois surpris de la stupidité de certains robots. Avec le meilleur exemple de stupidité (à mon avis) étant: lancez toutes les URL en minuscules avant de les demander.

Et puis, il y a tout un tas de robots qui ne suffisent pas à éviter les trappes.

Voir Project Honeypot – ils configurent des pièges à https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot à grande échelle (et disposent de DNSRBL avec leurs adresses IP).

Utilisez des URL et HTML complexes:

  = http:https://example.com/ on http pages.  = page& + #hash 

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

  (comment should not be removed)     

Il y a quelque temps, j’ai travaillé avec une petite société d’hébergement pour les aider à mettre en œuvre une solution à ce problème. Le système que j’ai développé a examiné les journaux du serveur Web afin de détecter toute activité excessive sur une adresse IP donnée et émis des règles de pare-feu pour bloquer les délinquants. Il incluait des listes blanches d’adresses IP / plages basées sur http://www.iplists.com/ , qui étaient ensuite mises à jour automatiquement en vérifiant les chaînes revendiquées par les agents utilisateurs et, si le client prétendait être une araignée légitime mais pas sur le client. Dans la liste blanche, il effectue des recherches DNS / reverse-DNS pour vérifier que l’adresse IP source correspond au propriétaire revendiqué du https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot. En guise de sécurité, ces actions ont été signalées à l’administrateur par e-mail, avec des liens vers l’adresse noir / liste blanche 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, le système fonctionnait très bien.

Point secondaire: Si vous envisagez de faire un système de détection similaire basé sur la limitation du taux de réussite, veillez à utiliser au moins une minute (et de préférence au moins cinq minutes). Je vois beaucoup de gens qui parlent de ce genre de système qui veulent bloquer quiconque est en tête de 5 à 10 hits en une seconde, ce qui peut générer des faux positifs sur les pages lourdes (à moins que les images soient exclues). des points positifs lorsque quelqu’un comme moi trouve un site intéressant qu’il veut tout lire, il ouvre donc tous les liens dans des tabs à charger en arrière-plan pendant qu’il lit le premier.

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

 Don't click me! 

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

Les crawlers valides suivraient bien entendu le lien. Mais vous ne devez pas implémenter un rel = nofollow, mais recherchez le signe d’un rohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot valide. (comme l’agent d’utilisateur)

Une chose que vous n’avez pas répertoriée et qui est couramment utilisée pour détecter les mauvais rohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bots.

La vitesse de frappe, les bons rohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bots d’exploration du Web vont briser leurs hits afin qu’ils ne délogent pas un site avec des requêtes. Les méchants feront l’une des trois choses suivantes:

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

De plus, certains programmes de navigation hors ligne réduiront le nombre de pages, je ne suis pas certain du type de seuil que vous souhaitez utiliser pour commencer à bloquer par adresse IP.

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

Si le https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot aléatoire l’intervalle de temps, vous pouvez vérifier si les liens sont parcourus de manière séquentielle ou en profondeur, ou vous pouvez voir si le https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot traverse une énorme quantité de texte (comme dans les mots à lire) dans un fichier. 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 pas où, si un utilisateur obtient trop de données, en termes de kilo-octets, il peut être présenté avec un captcha lui demandant de prouver qu’il n’est pas un https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot. Je n’ai jamais vu cela mis en œuvre cependant.

Mise à jour sur les liens cachés

En ce qui concerne le masquage des liens, vous pouvez placer un div sous un autre, avec CSS (en le plaçant en premier dans l’ordre de dessin) et en définissant éventuellement le z-order. Un https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot ne peut pas ignorer cela, sans parsingr tout votre 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 https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot parsing tous les javascript.

En complétant cette idée, javascript non appelé, qui pourrait potentiellement montrer les éléments cachés, pourrait tromper un sous-ensemble de rohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bots d’parsing javascript. Et, ce n’est pas beaucoup de travail à mettre en œuvre.

Une méthode simple de détection de https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot dont j’ai entendu parler pour les formulaires est la technique de saisie cachée. Si vous essayez de sécuriser un formulaire, placez une entrée dans le formulaire avec un identifiant qui a l’air tout à fait légitime. Ensuite, utilisez css dans un fichier externe pour le cacher. Ou si vous êtes vraiment paranoïaque, installez quelque chose comme jquery pour masquer la zone de saisie lors du chargement de la page. Si vous le faites correctement, j’imagine qu’il serait très difficile pour un https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot de le comprendre. Vous savez que ces rohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bots ont la nature de tout remplir sur une page, surtout si vous donnez à votre entrée cachée un identifiant de quelque chose comme id = “fname”, etc.

Non testé, mais voici une belle liste d’agents utilisateurs dont vous pouvez faire une expression régulière. Pourrait vous faire la plus grande partie du chemin:

 ADSARohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot|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:crafthttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot@yahoo.com|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Collector|Copier|Crescent|Crescent\ Internet\ ToolPak|Custo|cyberalert|DA$|Deweb|diagem|Digger|Digimarc|DIIhttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot|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|Girafahttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot|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\ Ssortingpper|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-sortingvial|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|pshttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot|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|Ssortingpper|Sucker|SuperBot|SuperHTTP|Surfhttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Templeton|TrueRohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot|TV33_Mercator|UIowaCrawler|UtilMind|URLSpiderPro|URL_Spider_Pro|Vacuum|vagranto|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|WebSsortingpper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|Whacker|whizbang|WhosTalking|Widow|WISEhttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot|WWWOFFLE|x-Tractor|^Xaldon\ WebSpider|WUMPUS|Xenu|XGET|Zeus.*Webster|Zeus [NC] 

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

Il n’est pas si facile de suivre les bonnes chaînes d’agent utilisateur. Les versions du navigateur vont et viennent. Faire des statistiques sur les chaînes d’agents utilisateurs par 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 différente.

Vous pouvez également vérifier les références. Aucun renvoi ne pourrait élever la suspension du https://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot. Mauvaise référence signifie que ce n’est certainement pas un navigateur.

Ajouter des 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 par Google pour le chapeau noir SEO 🙂

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

D’après mon expérience, les bloqueurs les plus importants de notre rohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bot d’exploration Web (qui utilisent bien sûr un IE ou Firefox UA et n’obéissent pas aux rohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bots.txt. Duh.) Sont des sites hébergeant intentionnellement des logiciels malveillants. C’est pénible parce que le site est alors utilisé par un utilisateur qui doit charger manuellement le site, le classer et le rechercher pour détecter les logiciels malveillants.

Je dis juste que, en bloquant les rohttps://stackoverflow.com/questions/233192/detecting-stealth-web-crawlers/bots d’exploration du Web, vous vous mettez dans une mauvaise société.

Bien sûr, si elles sont horriblement grossières et qu’elles absorbent des tonnes de votre bande passante, c’est une autre histoire parce que vous avez une bonne raison.