Stealth-webcrawlers detecteren

Welke opties zijn er om webcrawlers te detecteren die niet gedetecteerd willen worden?

(Ik weet dat het opsommen van detectietechnieken de slimme stealth-crawler-programmeur in staat zal stellen een betere spider te maken, maar ik denk niet dat we ooit in staat zullen zijn om slimme stealth-crawlers te blokkeren, alleen degenen die fouten maken. )

Ik heb het niet over de leuke crawlers zoals googlebot en Yahoo! slurpen.
Ik vind een bot leuk als hij:

  1. identificeert zichzelf als een bot in de user-agent string
  2. leest robots.txt (en gehoorzaamt)

Ik heb het over de slechtecrawlers, die zich verschuilen achter gewone user-agents, mijn bandbreedte gebruiken en me nooit iets teruggeven.

Er zijn enkele valluiken die kunnen worden gemaakt bijgewerkte lijst (bedankt Chris, gs):

  1. Een map toevoegen die alleen wordt vermeld (gemarkeerd als niet toegestaan) in de robots.txt,
  2. Onzichtbare links toevoegen (mogelijk gemarkeerd als rel=”nofollow”?),
    • style=”display: geen;” op link of bovenliggende container
    • onder een ander element met hogere z-index geplaatst
  3. detecteren wie CaPiTaLiSaTioN niet begrijpt,
  4. detecteren wie antwoorden probeert te plaatsen maar altijd de Captcha niet haalt.
  5. detecteer GET-verzoeken naar POST-bronnen
  6. detecteer interval tussen verzoeken
  7. volgorde van opgevraagde pagina’s detecteren
  8. detecteren wie (consistent) https-bronnen opvraagt ​​via http
  9. detecteren wie geen afbeeldingsbestand opvraagt ​​(dit in combinatie met een lijst met user-agents van bekende browsers die afbeelding kunnen gebruiken, werkt verrassend goed)

Sommige vallen worden geactiveerd door zowel ‘goede’ als ‘slechte’ bots.
je zou die kunnen combineren met een witte lijst:

  1. Het triggert een val
  2. Het verzoekt om robots.txt?
  3. Het veroorzaakt geen nieuwe val omdat het gehoorzaamde aan robots.txt

Een ander belangrijk ding hier is:
Overweeg alstublieft blinden die schermlezers gebruiken: geef mensen een manier om contact met u op te nemen, of los een Captcha (zonder afbeelding) op om door te gaan met browsen.

Welke methoden zijn er om automatisch de webcrawlers te detecteren die zichzelf proberen te maskeren als normale menselijke bezoekers.

Bijwerken
De vraag is niet: Hoe vang ik elke crawler.De vraag is: Hoe kan ik de kans maximaliseren om een ​​crawler te detecteren.

Sommige spiders zijn echt goed, en eigenlijk ontleden en begrijpen ze html, xhtml, css javascript, VB-script enz…
Ik heb geen illusies: ik zal ze niet kunnen verslaan.

Je zou echter verbaasd zijn hoe dom sommige crawlers zijn. Met als beste voorbeeld van domheid (naar mijn mening): cast alle URL’s naar kleine letters voordat je ze opvraagt.

En dan is er nog een hele hoop crawlers die gewoon ‘niet goed genoeg’ zijn om de verschillende valluiken te ontwijken.


Antwoord 1, autoriteit 100%

Een tijdje terug werkte ik samen met een klein hostingbedrijf om hen te helpen een oplossing hiervoor te implementeren. Het systeem dat ik ontwikkelde, onderzocht de logbestanden van de webserver op overmatige activiteit vanaf een bepaald IP-adres en stelde firewallregels op om overtreders te blokkeren. Het bevatte witte lijsten met IP-adressen/bereiken op basis van http://www.iplists.com/, die toen automatisch bijgewerkt indien nodig door geclaimde user-agent strings te controleren en, als de client beweerde een legitieme spider te zijn maar niet op de witte lijst, voerde hij DNS/reverse-DNS-lookups uit om te verifiëren dat het bron-IP-adres overeenkomt met de geclaimde eigenaar van de bot. Als een failsafe werden deze acties per e-mail aan de beheerder gemeld, samen met links om het adres op een zwarte/witte lijst te zetten in geval van een onjuiste beoordeling.

Ik heb die klant al zes maanden niet meer gesproken, maar het laatste wat ik hoorde, was dat het systeem behoorlijk goed functioneerde.

Nevenpunt: als u overweegt een soortgelijk detectiesysteem te gebruiken op basis van hit-rate-limiting, zorg er dan voor dat u de totalen van ten minste één minuut (en bij voorkeur ten minste vijf minuten) gebruikt. Ik zie veel mensen praten over dit soort schema’s die iedereen willen blokkeren die 5-10 hits in een seconde haalt, wat valse positieven kan genereren op pagina’s met veel afbeeldingen (tenzij afbeeldingen worden uitgesloten van de telling) en genereertvalse positieven wanneer iemand zoals ik een interessante site vindt die hij allemaal wil lezen, dus opent hij alle links in tabbladen om op de achtergrond te laden terwijl hij de eerste leest.


Antwoord 2, autoriteit 88%

Zie Project Honeypot– ze zetten op grote schaal bot-traps op (en hebben DNSRBL met hun IP’s ).

Gebruik lastige URL’s en HTML:

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

In HTML kun je tal van trucjes gebruiken met opmerkingen, CDATA-elementen, entiteiten, enz.:

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

Antwoord 3, autoriteit 59%

Een gemakkelijke oplossing is om een ​​link te maken en deze onzichtbaar te maken

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

Natuurlijk mag je verwachten dat sommige mensen die naar de broncode kijken die link volgen om te zien waar deze naartoe leidt. Maar je zou die gebruikers een captcha kunnen geven…

Geldige crawlers zouden natuurlijk ook de link volgen. Maar u moet geen rel=nofollow implementeren, maar zoeken naar het teken van een geldige crawler. (zoals de user-agent)


Antwoord 4, autoriteit 41%

Eén ding dat je niet hebt vermeld, dat vaak wordt gebruikt om slechte crawlers te detecteren.

Hitsnelheid, goede webcrawlers breken hun hits af zodat ze een site niet overspoelen met verzoeken. Slechte zal een van de volgende drie dingen doen:

  1. klik op opeenvolgende links achter elkaar
  2. klik op opeenvolgende links in een parallelle reeks (2 of meer tegelijk.)
  3. klik op opeenvolgende links met een vast interval

Ook sommige offline browserprogramma’s slurpen een aantal pagina’s op, ik weet niet zeker wat voor soort drempel je zou willen gebruiken om te beginnen met blokkeren op IP-adres.

Deze methode zal ook spiegelprogramma’s zoals fmirror of wget opvangen.

Als de bot het tijdsinterval willekeurig verdeelt, kunt u controleren of de links op een sequentiële of diepte-eerst manier worden doorlopen, of u kunt zien of de bot een enorme hoeveelheid tekst doorloopt (zoals in woorden om te lezen ) in een te korte tijd. Sommige sites beperken ook het aantal verzoeken per uur.

Eigenlijk hoorde ik ergens een idee, ik weet niet meer waar, dat als een gebruiker te veel gegevens krijgt, in termen van kilobytes, ze een captcha kunnen krijgen waarin ze worden gevraagd te bewijzen dat ze geen bot zijn. Ik heb dat echter nog nooit geïmplementeerd gezien.

Update over het verbergen van links

Wat het verbergen van links betreft, kun je een div onder een andere plaatsen, met CSS (deze als eerste in de trekkingsvolgorde plaatsen) en eventueel de z-volgorde instellen. Een bot kan dat niet negeren, zonder al je javascript te ontleden om te zien of het een menu is. Tot op zekere hoogte kunnen links in onzichtbare DIV-elementen ook niet worden genegeerd zonder dat de bot al het javascript ontleden.

Als je dat idee tot een goed einde brengt, zou niet-genoemd javascript, dat mogelijk de verborgen elementen zou kunnen tonen, mogelijk een subset van javascript-parsing-bots voor de gek houden. En het is niet veel werk om te implementeren.


Antwoord 5, autoriteit 24%

Het is eigenlijk niet zo eenvoudig om de goede user-agent-strings bij te houden. Browserversies komen en gaan. Het maken van een statistiek over user-agent strings op basis van verschillende gedragingen kan interessante dingen onthullen.

Ik weet niet in hoeverre dit geautomatiseerd kan worden, maar het is in ieder geval iets onderscheidends.


Antwoord 6, autoriteit 24%

Een eenvoudige botdetectiemethode die ik voor formulieren heb gehoord, is de verborgen invoertechniek. Als u een formulier probeert te beveiligen, plaatst u een invoer in het formulier met een id die er volledig legitiem uitziet. Gebruik dan css in een extern bestand om het te verbergen. Of als je echt paranoïde bent, stel dan iets in als jQuery om het invoervak ​​​​bij het laden van de pagina te verbergen. Als je dit goed doet, kan ik me voorstellen dat het heel moeilijk zou zijn voor een bot om erachter te komen. Je weet dat die bots het van nature hebben om alles op een pagina in te vullen, vooral als je je verborgen invoer een id geeft van zoiets als id=”fname”, enz.


Antwoord 7, autoriteit 18%

Niet getest, maar hier is een mooie lijst van user-agents waar je een reguliere expressie van zou kunnen maken. Kan je het grootste deel van de weg daarheen brengen:

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]

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


Antwoord 8, autoriteit 6%

U kunt ook verwijzingen controleren. Geen enkele verwijzing kon bot argwaan wekken. Slechte verwijzing betekent zeker dat het geen browser is.

Onzichtbare links toevoegen (mogelijk gemarkeerd als rel=”nofollow”?),

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

Dat zou ik niet doen. Je kunt op de zwarte lijst van Google komen voor Black Hat SEO 🙂


Antwoord 9, autoriteit 6%

Ik werk momenteel voor een bedrijf dat websites scant om ze te classificeren. We controleren sites ook op malware.

In mijn ervaring zijn de grootste blokkers van onze webcrawler (die natuurlijk een IE of Firefox UA gebruikt en niet gehoorzaamt aan robots.txt. Duh.) sites die opzettelijk malware hosten. Het is vervelend omdat de site dan terugvalt op een mens die de site handmatig moet laden, classificeren en controleren op malware.

Ik zeg alleen maar, door door webcrawlers te blokkeren, brengt u uzelf in slecht gezelschap.

Natuurlijk, als ze vreselijk onbeleefd zijn en tonnen van je bandbreedte opslokken, is het een ander verhaal, want dan heb je een goede reden.


Antwoord 10, autoriteit 6%

Mensen blijven brede crawlers aanspreken, maar geen crawlers die gespecialiseerd zijn voor uw website.

Ik schrijf stealth-crawlers en als ze afzonderlijk worden gebouwd, zal geen enkele hoeveelheid honingpotten of verborgen links enig effect hebben – de enige echte manier om gespecialiseerde crawlers te detecteren, is door verbindingspatronen te inspecteren.

De beste systemen gebruiken AI (bijv. Linkedin) gebruiken AI om dit aan te pakken.
De eenvoudigste oplossing is om log-parsers te schrijven die IP-verbindingen analyseren en die IP’s eenvoudigweg op een zwarte lijst te zetten of captcha te serveren, in ieder geval tijdelijk.

bijv.
als IP X elke 2 seconden wordt gezien bij het verbinden met foo.com/cars/*.htmlmaar niet met andere pagina’s, is dit hoogstwaarschijnlijk een bot of een hongerige krachtige gebruiker.

Als alternatief zijn er verschillende javascript-uitdagingen die als bescherming fungeren (bijvoorbeeld het antibotsysteem van Cloudflare), maar die zijn gemakkelijk op te lossen, je kunt iets op maat schrijven en dat kan voldoende afschrikwekkend zijn om het de moeite voor de crawler niet waard te maken.

U moet echter een vraag stellen, bent u bereid om vals-positieve legitieme gebruikers te informeren en hen ongemak te bezorgen om botverkeer te voorkomen. Het beschermen van openbare gegevens is een onmogelijke paradox.


Antwoord 11

kort antwoord: als een mid-level programmeur weet wat hij doet, kun je een crawler niet detecteren zonder de echte gebruiker te beïnvloeden. Als u uw informatie openbaar heeft, kunt u deze niet verdedigen tegen een crawler… het is als het eerste amendement goed 🙂

Other episodes