Rilevamento di web crawler "invisibili"


107

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

(So ​​che le tecniche di rilevamento degli elenchi consentiranno al programmatore intelligente di crawler stealth di creare uno spider migliore, ma non credo che saremo mai in grado di bloccare comunque i crawler stealth intelligenti, solo quelli che commettono errori.)

Non sto parlando dei simpatici crawler come googlebot e Yahoo! Slurp. Considero un bot carino se:

  1. si identifica come un bot nella stringa dell'agente utente
  2. legge robots.txt (e lo obbedisce)

Sto parlando dei cattivi crawler, 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 con un elenco aggiornato (grazie Chris, gs) :

  1. Aggiungendo una directory solo elencata (contrassegnata come non consentita) nel file robots.txt,
  2. Aggiunta di link invisibili (eventualmente contrassegnati come rel = "nofollow"?),
    • style = "display: none;" sul collegamento o sul contenitore principale
    • posizionato sotto un altro elemento con un indice z più alto
  3. rilevare chi non capisce le maiuscole,
  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. rilevare chi (costantemente) richiede risorse https su http
  9. rilevare chi non richiede il file immagine (questo in combinazione con un elenco di user-agent di noti browser con capacità di immagine funziona sorprendentemente bene)

Alcune trappole verrebbero attivate da bot sia "buoni" che "cattivi". potresti combinarli 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 cosa importante qui è: per
favore considera i non vedenti che usano uno screen reader: dai alle persone un modo per contattarti, o risolvi un captcha (non immagine) per continuare a navigare.

Quali metodi esistono per rilevare automaticamente i web crawler che cercano di mascherarsi da normali visitatori umani.

Aggiornamento
La domanda non è: come catturo ogni crawler. La domanda è: come posso massimizzare le possibilità di rilevare un crawler.

Alcuni spider sono davvero bravi, e in realtà analizzano e comprendono html, xhtml, css javascript, script VB ecc ...
Non mi faccio illusioni: non sarò in grado di batterli.

Saresti comunque sorpreso di quanto siano stupidi alcuni crawler. Con il miglior esempio di stupidità (a mio parere): lancia tutti gli URL in minuscolo prima di richiederli.

E poi c'è un sacco di crawler che semplicemente "non sono abbastanza bravi" da evitare le varie botole.

Risposte:


15

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à eccessiva da un dato indirizzo IP e ha emesso regole del firewall per bloccare i trasgressori. Comprendeva whitelist di indirizzi / intervalli IP basati su http://www.iplists.com/ , che venivano quindi aggiornati automaticamente secondo necessità controllando le stringhe dello user-agent dichiarate e, se il client dichiarava di essere uno spider legittimo ma non sul whitelist, ha eseguito ricerche DNS / DNS inverso per verificare che l'indirizzo IP di origine corrisponda al proprietario dichiarato del bot. Come sicurezza, queste azioni sono state segnalate all'amministratore tramite e-mail, insieme ai collegamenti per inserire nella lista nera / bianca l'indirizzo in caso di valutazione errata.

Non parlo con quel cliente da 6 mesi o giù di lì, ma, l'ultima volta che ho sentito, il sistema funzionava abbastanza efficacemente.

Nota a margine: se stai pensando di realizzare un sistema di rilevamento simile basato sulla limitazione della frequenza di hit, assicurati di utilizzare almeno un minuto (e preferibilmente almeno cinque minuti) totali. Vedo un sacco di persone che parlano di questo tipo di programmi che vogliono blocco chiunque supera 5-10 colpi in un secondo, che può generare falsi positivi sulle pagine di immagini-pesante (a meno che le immagini sono esclusi dal conteggio) e si genererà falso positivo quando uno come me trova un sito interessante di cui vuole leggere tutto, quindi apre tutti i link nelle schede da caricare in background mentre legge il primo.


5
Trovo che il falso positivo dovuto al blocco del web crawler uccida assolutamente il traffico web. Stai fondamentalmente facendo incazzare il 99,8% del tuo utente in un misero tentativo di ostacolare i crawler che possono facilmente aggirare questo metodo ingenuo descritto. Non è mai una buona idea negare l'accesso agli utenti o ostacolarlo perché distrugge l'esperienza dell'utente con il tuo sito.
KJW

14

Vedi Project Honeypot : stanno impostando bot trap su larga scala (e hanno DNSRBL con i loro IP).

Usa URL e HTML complicati:

<a href="https://stackoverflow.com//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"> <!-->

9

Una soluzione semplice è 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 porta. Ma potresti presentare a quegli utenti un captcha ...

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


1
A meno che il bot non controlli gli attributi CSS del collegamento e non segua il collegamento perché non è visibile a un utente umano ...
Bob Somers

1
Etichettare il collegamento "NON fare clic su di me" sarebbe un'idea migliore .. Se qualcuno ha CSS disabilitato (o nessun supporto CSS), il collegamento sarà visibile ..
dbr

Buona idea. Forse cambia il testo in "." e lo stile CSS per abbinare lo sfondo, rendendolo invisibile alla maggior parte degli utenti? Oppure eseguire uno script per nasconderlo dopo 1 secondo lasciandolo visibile solo a un bot che non può collegare il comando javascript hide al collegamento?
Underverse

1
Attenzione alla penalità black hat dal punto di vista SEO.
Alfred Wallace,

6

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

Velocità di hit, buoni web crawler interromperanno i loro hit in modo da non inondare un sito di richieste. Quelli cattivi faranno una delle tre cose:

  1. colpire i collegamenti sequenziali uno dopo l'altro
  2. colpire collegamenti sequenziali in una sequenza parallela (2 o più alla volta).
  3. colpire i collegamenti sequenziali a un intervallo fisso

Inoltre, alcuni programmi di navigazione offline consumeranno un certo numero di pagine, non sono sicuro del tipo di soglia che vorresti usare per iniziare a bloccare in base all'indirizzo IP.

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

Se il bot randomizza l'intervallo di tempo, puoi controllare se i collegamenti vengono attraversati in modo sequenziale o in modo approfondito, 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 che non sono un bot. Non l'ho mai visto implementato però.

Aggiornamento su come nascondere i collegamenti

Per quanto riguarda l'occultamento dei link, puoi mettere un div sotto un altro, con CSS (posizionandolo per primo nell'ordine di disegno) ed eventualmente impostando l'ordine z. Un bot non potrebbe ignorarlo, senza analizzare tutto il tuo javascript per vedere se si tratta di un menu. In una certa misura, anche i collegamenti all'interno di elementi DIV invisibili non possono essere ignorati senza che il bot analizzi tutto il javascript.

Portando a termine questa idea, javascript non chiamato che potrebbe potenzialmente mostrare gli elementi nascosti potrebbe ingannare un sottoinsieme di bot di analisi javascript. E non è molto lavoro da implementare.


16
Grande difetto con i metodi "ignorare JavaScript significa che sei un bot": alcuni di noi usano il plugin NoScript. Nessun sito esegue JavaScript su di me a meno che non inserisca il sito nella whitelist e sono abbastanza sicuro di non essere un bot.
Dave Sherohman

2
i bot possono eseguire Javascript ora ... è il 2013 per l'amor di Dio. quindi ecco l'intero argomento. chi dice che i web crawler visitano i siti in selezioni sequenziali? un altro enorme presupposto.
KJW

1
Il javascript era solo per la visualizzazione di un collegamento honeypot. L'idea è che i bot analizzeranno il javascript che renderà visibile un collegamento honeypot, rendendo più probabile che seguano il collegamento. Tuttavia, per un utente reale, il codice che rende visibile il collegamento non verrebbe mai eseguito. Quindi gli utenti di NoScript, insieme a chiunque non esegua le funzioni in modo casuale, andrebbero bene. Detto questo, non sono sicuro del perché / come un bot eseguisse del codice in modo casuale e se stesse facendo un'analisi statica per determinare se un elemento potesse diventare visibile, sarebbe un bot di fantasia.
Rick

4

Un semplice metodo di rilevamento dei bot di cui ho sentito parlare per i moduli è la tecnica di input nascosto. 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. Oppure, se sei davvero 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 bot capirlo. Sai che quei bot hanno la natura di compilare tutto su una pagina, specialmente se dai al tuo input nascosto un id di qualcosa come id = "fname", ecc.


2
non se i bot sono in grado di aspettare che il jquery finisca, proprio come fa un normale browser. Avrebbe funzionato bene nei primi anni
2000

3

In realtà non è così facile tenere il passo con le buone stringhe dell'agente utente. Le versioni del browser vanno e vengono. Fare una statistica sulle stringhe dell'agente utente in base a comportamenti diversi può rivelare cose interessanti.

Non so fino a che punto questo potrebbe essere automatizzato, ma almeno è una cosa che differenzia.


3

Non testato, ma ecco una bella lista di user-agent da cui potresti creare un'espressione regolare. Potrebbe portarti quasi tutto 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:craftbot@yahoo.com|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]

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


1

Puoi anche controllare i referral. Nessun rinvio potrebbe sollevare la sospetta del bot. Un cattivo referral significa che certamente non è un browser.

Aggiunta di link invisibili (eventualmente 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 SEO black hat :)


1
Cosa esattamente e perché dovrebbe farti inserire nella lista nera?
conteh

1

Attualmente lavoro per una società che esegue la scansione di siti Web per classificarli. Controlliamo anche i siti alla ricerca di malware.

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

Sto solo dicendo che, bloccando i web crawler, ti metti in una cattiva compagnia.

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


15
Mi dispiace, ma se esegui un crawler che non obbedisce al file robots.txt, non stai obbedendo alle regole. Non obbedendo alle regole, ti metti in una pessima compagnia. Suggerendo che l'applicazione delle regole stabilite dal proprietario del sito web (in robots.txt) è una cattiva pratica, stai erroneamente capovolgendo la questione. In pratica dichiari di non capire chi sia il legittimo proprietario dei contenuti.
Jacco

11
@ Jacco: Se un crawler alla ricerca di malware obbedisse alle regole, non ne troverebbe mai. Vai a parlare con gli autori del malware.
Zan Lynx,

5
@ Jacco: Percentuale di siti legittimi che tentano di bloccare i crawler non conformi? Meno dell'1%. Siti di malware che provano? Oltre il 60%. Quindi sì, è sospetto.
Zan Lynx

4
@Jacco in realtà no, non ci sono proprietari di un contenuto sul web se è pubblico. Qualcuno che sta facendo questo senza copiare e incollare manualmente dovrebbe ricevere un premio, non una punizione. L'intero concetto di copyright deve essere abolito su Internet. Solo l'innovazione creativa e la fiducia possono costruire valore e degno dell'attenzione delle persone, non con la minaccia di un velo legale opaco.
KJW

Tutto ciò indica che la persona che gestisce il sito ha dedicato molto tempo e pensiero al sito e ha un certo grado di abilità tecnica. Quindi ovviamente questo esclude la maggior parte della curva a campana.
Parthian Shot

1

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

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

I migliori sistemi utilizzano l'IA (ad esempio Linkedin) utilizzano l'IA per affrontare questo problema.
La soluzione più semplice è scrivere parser di log che analizzano le connessioni IP e semplicemente inseriscono nella blacklist quegli IP o servono captcha, almeno temporaneamente.

ad esempio,
se IP X viene visto ogni 2 secondi mentre si connette foo.com/cars/*.htmlma non altre pagine, è molto probabilmente un bot o un utente esperto affamato.

In alternativa ci sono varie sfide javascript che fungono da protezione (ad esempio il sistema anti-bot di Cloudflare), ma quelle sono facilmente risolvibili, puoi scrivere qualcosa di personalizzato e questo potrebbe essere un deterrente sufficiente per non far valere lo sforzo per il crawler.

Tuttavia, devi porre una domanda se sei disposto a falsi positivi utenti legittimi e introdurre inconvenienti per loro per prevenire il traffico dei bot. La protezione dei dati pubblici è un paradosso impossibile.


-1

risposta breve: se un programmatore di medio livello sa cosa sta facendo, non sarai in grado di rilevare un crawler senza influenzare l'utente reale. Avendo le tue informazioni pubblicamente non sarai in grado di difenderle da un crawler ... è come il primo emendamento giusto :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.