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:
- si identifica come un bot nella stringa dell'agente utente
- 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) :
- Aggiungendo una directory solo elencata (contrassegnata come non consentita) nel file robots.txt,
- 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
- rilevare chi non capisce le maiuscole,
- rileva chi tenta di inviare risposte ma fallisce sempre il Captcha.
- rilevare le richieste GET alle risorse solo POST
- rilevare l'intervallo tra le richieste
- rilevare l'ordine delle pagine richieste
- rilevare chi (costantemente) richiede risorse https su http
- 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:
- Innesca una trappola
- Richiede
robots.txt
? - 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.