it-swarm.dev

Rilevamento di web crawler "stealth"

Quali opzioni ci sono per rilevare i web crawler che non vogliono essere rilevati?

(So ​​che le tecniche di rilevamento delle liste permetteranno al programmatore di smart stealth-crawler di creare uno spider migliore, ma non credo che saremo mai in grado di bloccare comunque i crawler furtivi intelligenti, solo quelli che commettono errori).

Non sto parlando dei crawler di Nizza come googlebot e Yahoo! Slurp . Considero un bot Nice se:

  1. si identifica come un bot nella stringa dell'agent user
  2. legge robots.txt (e obbedisce)

Sto parlando dei crawler bad, che si nascondono dietro agenti utente comuni, usano la mia larghezza di banda e non mi danno mai nulla in cambio.

Ci sono alcune botole che possono essere costruite elenco aggiornato (grazie Chris, gs):

  1. Aggiunta di una directory elencata solo (contrassegnata come non consentita) nel file robots.txt,
  2. Aggiunta di link invisibili (eventualmente contrassegnati come rel = "nofollow"?),
    • style = "display: none;" sul link o sul contenitore principale
    • posto sotto un altro elemento con un più alto indice z
  3. rileva chi non capisce la capitalizzazione,
  4. rileva chi tenta di inviare risposte ma fallisce sempre il Captcha.
  5. rilevare le richieste GET alle risorse solo POST
  6. rilevare l'intervallo tra le richieste
  7. rilevare l'ordine delle pagine richieste
  8. rileva chi (coerentemente) richiede le risorse https su http
  9. rileva chi non richiede file immagine (questo in combinazione con un elenco di user-agent di browser con immagini conosciute funziona sorprendentemente bene)

Alcune trappole potrebbero essere attivate da entrambi i robot "buoni" e "cattivi". Si potrebbero combinare quelli con una whitelist:

  1. Innesca una trappola
  2. Richiede robots.txt
  3. Non fa scattare un'altra trappola perché ha obbedito robots.txt

Un'altra importante cosa qui è:
Ti preghiamo di considerare i non vedenti utilizzando uno screen reader: dare alle persone un modo per contattarti o risolvere un Captcha (non immagine) per continuare la navigazione.

Quali metodi ci sono per rilevare automaticamente i web crawler che cercano di mascherarsi come normali visitatori umani.

Aggiornare
La domanda non è: Come catturo ogni crawler. La domanda è: Come posso massimizzare la possibilità di rilevare un crawler. 

Alcuni ragni sono veramente buoni, e in realtà analizzano e comprendono html, xhtml, css javascript, VB script ecc ...
Non ho illusioni: non sarò in grado di batterli.

Sareste comunque sorpresi di quanto stupidi siano alcuni crawler. Con il miglior esempio di stupidità (a mio parere) essere: cast tutti gli URL in minuscolo prima di richiederli.

E poi c'è un gruppo di crawler che non sono abbastanza bravi per evitare le varie botole.

106
Jacco

Qualche tempo fa, ho lavorato con una piccola società di hosting per aiutarli a implementare una soluzione a questo problema. Il sistema che ho sviluppato ha esaminato i registri del server Web per attività eccessive da qualsiasi dato indirizzo IP e ha emesso regole firewall per bloccare i trasgressori. Includeva whitelist di indirizzi/intervalli IP basati su http://www.iplists.com/ , che venivano poi aggiornati automaticamente secondo necessità controllando le stringhe utente-agente richieste e, se il client affermava di essere uno spider legittimo ma non sulla whitelist, ha eseguito ricerche DNS/DNS inverso per verificare che l'indirizzo IP di origine corrisponda al proprietario rivendicato del bot. Come soluzione di sicurezza, queste azioni sono state segnalate all'amministratore tramite e-mail, insieme ai collegamenti a nero/lista bianca l'indirizzo in caso di una valutazione errata.

Non ho parlato con quel cliente in 6 mesi o giù di lì, ma, l'ultima volta che ho sentito, il sistema stava funzionando in modo abbastanza efficace.

Punto laterale: se stai pensando di realizzare un sistema di rilevamento simile basato sulla limitazione della velocità di propagazione, assicurati di utilizzare almeno un minuto (e preferibilmente almeno cinque minuti) di totali. Vedo un sacco di persone che parlano di questo tipo di schemi che vogliono bloccare chiunque superi i 5-10 hit in un secondo, il che può generare falsi positivi sulle pagine con immagini pesanti (a meno che le immagini non siano escluse dal conteggio) e will genera falsi positivi quando qualcuno come me trova un sito interessante che vuole leggere tutto, quindi apre tutti i link in schede da caricare in background mentre legge il primo.

15
Dave Sherohman

Vedi Progetto Honeypot - stanno configurando bot trap su larga scala (e hanno DNSRBL con i loro IP).

Usa URL e HTML difficili:

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

In HTML puoi usare molti trucchi con commenti, elementi CDATA, entità, ecc:

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

Una soluzione facile è creare un collegamento e renderlo invisibile

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

Ovviamente dovresti aspettarti che alcune persone che guardano il codice sorgente seguano quel link solo per vedere dove conduce. Ma potresti presentare quegli utenti con un captcha ...

I crawler validi, ovviamente, seguiranno anche il link. Ma non dovresti implementare un rel = nofollow, ma cerca il segno di un crawler valido. (come l'agente utente)

9
Georg Schölly

Una cosa che non hai elencato, usata comunemente per rilevare i crawler cattivi.

Velocità impressionante, i buoni crawler web romperanno i loro colpi in modo da non far diluire un sito con richieste. I cattivi faranno una delle tre cose:

  1. colpire i collegamenti sequenziali uno dopo l'altro
  2. colpisci i collegamenti sequenziali in qualche sequenza parallela (2 o più alla volta).
  3. colpisci collegamenti sequenziali a intervalli fissi

Inoltre, alcuni programmi di navigazione offline ingrandiranno un certo numero di pagine, non sono sicuro del tipo di soglia che vorresti utilizzare, per iniziare a bloccare per indirizzo IP.

Questo metodo catturerà anche programmi di mirroring come fmirror o wget.

Se il bot randomizza l'intervallo di tempo, puoi controllare se i link sono attraversati in modo sequenziale o di profondità, oppure puoi vedere se il bot sta attraversando un'enorme quantità di testo (come nelle parole da leggere) in un periodo di tempo troppo breve. Alcuni siti limitano anche il numero di richieste all'ora.

In realtà, ho sentito un'idea da qualche parte, non ricordo dove, che se un utente riceve troppi dati, in termini di kilobyte, può essere presentato con un captcha che chiede loro di dimostrare di non essere un bot. Non l'ho mai visto implementato però.

Per quanto riguarda i link nascosti, puoi mettere un div al di sotto di un altro, con il CSS (ponendolo prima nell'ordine di disegno) e possibilmente impostando l'ordine z. Un bot non può ignorarlo, senza analizzare tutto il tuo javascript per vedere se si tratta di un menu. In una certa misura, i collegamenti all'interno di elementi DIV invisibili non possono essere ignorati senza il bot che analizza tutto il javascript.

Portando a termine l'idea, javascript non richiamato, che potrebbe mostrare gli elementi nascosti, potrebbe ingannare un sottoinsieme di bot di analisi javascript. E non è molto da implementare.

6
Chris

Un metodo di rilevamento dei bot semplice di cui ho sentito parlare per le forme è la tecnica di input nascosta. Se stai cercando di proteggere un modulo inserisci un input nel modulo con un ID che sembra completamente legittimo. Quindi usa css in un file esterno per nasconderlo. O se sei veramente paranoico, imposta qualcosa come jquery per nascondere la casella di input al caricamento della pagina. Se lo fai bene, immagino che sarebbe molto difficile per un robot capire. Sai, quei bot hanno la natura di riempire tutto in una pagina, specialmente se dai il tuo input nascosto un id di qualcosa come id = "fname", ecc.

4
Agile Noob

Non testato, ma qui c'è una bella lista di user-agent da cui puoi fare un'espressione regolare. Potresti ottenere la maggior parte del modo lì:

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|[email protected]\.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|[email protected]|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|[email protected]|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]

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

3
Brian Armstrong

In realtà non è così facile tenere il passo con le buone stringhe di user-agent. Le versioni del browser vanno e vengono. Fare una statistica sulle stringhe di user agent secondo comportamenti diversi può rivelare cose interessanti.

Non so quanto questo possa essere automatizzato, ma almeno è una cosa che differenzia.

2
iny

Puoi anche controllare i referral. Nessun rinvio potrebbe sollevare sospetti bot. Bad referral significa certamente che non è un browser.

Aggiunta di link invisibili (possibilmente contrassegnati come rel = "nofollow"?),

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

Non lo farei. Puoi finire nella lista nera di google per black hat SEO :)

1
Danubian Sailor

Attualmente lavoro per un'azienda che esegue la scansione di siti Web per classificarli. Controlliamo anche i siti per malware.

Nella mia esperienza i bloccanti numero uno del nostro web crawler (che ovviamente usa IE o Firefox UA e non obbediscono a robots.txt. Duh.) Sono siti che ospitano intenzionalmente malware. È un problema perché il sito ricade poi su un essere umano che deve caricare manualmente il sito, classificarlo e controllarlo in cerca di malware.

Sto solo dicendo, bloccando i web crawler ti stai mettendo in una brutta compagnia.

Certo, se sono orribilmente maleducati e succhiano tonnellate della tua larghezza di banda, è una storia diversa perché allora hai una buona ragione.

0
Zan Lynx

Le persone continuano a rivolgersi a grandi crawler ma non a crawler specializzati per il tuo sito web.

Scrivo crawl furtivi e se sono costruiti individualmente nessuna quantità di vasi di miele o collegamenti nascosti avrà alcun effetto di sorta - l'unico vero modo per rilevare crawler specializzati è ispezionare i modelli di connessione. 

I migliori sistemi usano l'intelligenza artificiale (ad esempio, Linkedin) usano l'intelligenza artificiale per risolvere questo problema.
La soluzione più semplice sono i parser dei log di scrittura che analizzano le connessioni IP e aggiungono semplicemente gli elenchi di indirizzi IP o servono captcha, almeno temporaneamente. 

per esempio.
se IP X è visto ogni 2 secondi collegandosi a foo.com/cars/*.html ma non a qualsiasi altra pagina - è molto probabilmente un bot o un utente assetato di fame.

In alternativa ci sono varie sfide javascript che fungono da protezione (ad esempio il sistema anti-bot di Cloudflare), ma quelle sono facilmente risolvibili, è possibile scrivere qualcosa di personalizzato e questo potrebbe essere un deterrente sufficiente a renderlo inutile per il crawler.

Tuttavia, è necessario porre una domanda se si è disposti a utenti legittimi falsi positivi e si presentano inconvenienti per impedire il traffico di bot. Proteggere i dati pubblici è un paradosso impossibile.

0
Granitosaurus