Rilevazione dei bot considerando il tempo di inter-arrivo della richiesta

4

Se ci sono alcune possibilità di rilevare un bot considerando il tempo di visualizzazione della pagina degli utenti, è possibile misurare questa volta?

Quando una richiesta utente per una pagina (richiesta di pagina), richiesta browser per diversi altri componenti all'interno di quella pagina (richieste in linea), cioè immagini, CSS, JS, ...

Semplicemente sniffando il traffico, è possibile trovare l'intervallo di tempo tra le richieste di pagina dell'utente (tempo di visualizzazione della pagina) scartando le richieste in linea? È necessario differenziare la richiesta di pagina e le richieste in linea. È possibile?

    
posta Yasser 13.01.2013 - 15:44
fonte

6 risposte

5

In Incapsula usiamo alcuni di questi metodi per il rilevamento dei bot (ad esempio JS e Cookie) ma non sono sicuro della metrica di visualizzazione della pagina.

Per prima cosa, vuoi rilevare e bloccare i bot dannosi il più rapidamente possibile e ci sono cose migliori che puoi fare per aspettare, anche se è solo per poco tempo.

Devo anche accettare (+1) con @yfeldblum riguardo alle intestazioni Expire e la loro capacità di interrompere i test basati sul carico delle risorse. Detto questo, CND e server multipli non sono un problema se le sfide sono eseguite dal fornitore CDN stesso.

Volevo anche contribuire con poche altre idee per il rilevamento dei bot:

  • Comportamento (ad esempio accesso anticipato a robots.txt)
  • Ordine di intestazione HTTP / parametri mancanti

Inoltre, vorrei suggerire di non fare affidamento sull'esclusività su nessuno di questi metodi perché ciò porterà a un'identificazione falsamente positiva. Invece, prova a combinarli in un processo di verifica incrociata passo-passo. (Ad es. JS challenge -if failed- > Cookie challenge -if failed- > accesso a Robots.txt e così via ....)

Infine, ad un certo punto dovrai iniziare a raccogliere e fare affidamento sulle firme per ridurre al minimo la ridondanza.

Dopo tutto, non puoi continuare a testare Baidu bot ogni volta che visita, questo è solo ad un passo da un DDoS autoinflitto. :)

    
risposta data 14.01.2013 - 13:52
fonte
4

Ci sono alcuni problemi con questo approccio:

  1. Più server Web: se si dispone di più server Web, è necessario mantenere questo monitoraggio altrove, possibilmente in modo distribuito.
  2. Hostet di asset CDN: se si ospitano risorse su una rete CDN, è necessario estendere questo monitoraggio per includere le risorse ospitate da CDN.
  3. Asset Fingerprinting e Caching: se impronte digitali i nomi dei file delle risorse compilate con i digest md5 dei loro contenuti e imposti efficaci Expires: never di intestazioni per le risorse impronte digitali, i browser non richiederanno le risorse dai tuoi server o dal tuo CDN la maggior parte di il tempo, che porta a un tasso di falsi positivi molto grande.
risposta data 13.01.2013 - 19:14
fonte
3

Poiché HTTP è un protocollo stateless dovresti sviluppare alcuni attributi a livello di sessione per differenziare tra bot e client web. Quello che raccomando è di implementare un firewall a livello di applicazione che consenta di creare e mantenere variabili a livello di sessione su ogni sessione web. Segue una ModSecurity Regola per il monitoraggio della sessione Web.

SecRule REQUEST_COOKIES:PHPSESSID !^$ chain,nolog,pass
SecAction setsid:%{REQUEST_COOKIES.PHPSESSID}
SecRule REQUEST_URI "^/cgi-bin/finger$" "pass,log,setvar:session.score=+10"
SecRule SESSION:SCORE "@gt 50" "pass,log,setvar:session.blocked=1"
SecRule SESSION:BLOCKED "@eq 1" "log,deny,status:403"

Vorrei anche consigliare qualche ritocco nel monitor HTTP OpenNMS potrebbe essere di qualche aiuto.

    
risposta data 13.01.2013 - 16:57
fonte
3

Sembra che se implementato il tuo approccio catturerebbe molti robot. Esistono dei robot che eseguono un intero web-stack come webkit o mozilla che richiederebbero comunque le risorse in linea, i cookie e persino l'esecuzione di javascript. Purtroppo, se qualcuno vuole indirizzare in modo mirato il tuo sito, potrebbe usare imacros per scrivere un bot del browser che sconfigge il tuo approccio di rilevamento dei bot.

Tuttavia, ritengo che sia un impegno degno di questo, quindi dovresti provarci.

    
risposta data 14.01.2013 - 01:53
fonte
2

Ci sono un sacco di altre euristiche che trovo catturano molti robot e scraper:

  1. Aggiornamento manuale di un'espressione regolare di un utente utente (incredibile quanti bot hanno effettivamente parole come bot, raschietto, agente, spider nella stringa dell'agent user.
  2. Questo IP crea una nuova sessione su ogni richiesta (implica che non memorizza e restituisce i cookie di sessione)?
  3. Rapporto tra IP per agente utente
  4. Rapporto tra hit per IP
  5. Rapporto tra i tipi di pagine richieste (1 pagina indice, 50 pagine articolo sembra più un agente meccanico)
  6. Conta le richieste per la stessa pagina (alcuni bot hanno dei bug)
  7. # richieste di pagine al minuto (molto improbabile che una persona richieda 100 pagine in cinque minuti.
  8. Geolocalizza e chi è l'IP di origine per IP che richiede più di N pagine al giorno (è improbabile che il mio sito in lingua inglese nyc abbia un utente in Kazakistan o con un indirizzo IP ec2)
risposta data 15.05.2013 - 22:16
fonte
1

Questi due articoli ( 1st e 2nd ) sono abbastanza correlati alla tua domanda. Questi non sono gratuiti quindi per quelli che non hanno accesso a quelli, lasciami dire brevemente che cosa fanno.

Guardando solo un'attività degli host nella pagina web, gli autori cercano di distinguere gli spambot dall'essere umano. Nel primo articolo esaminano Mouse clicks and movements, Keyboard actions Form field focus and un-focus Form load and submission Page navigation

Per la tua domanda, se un essere umano riempie una casella di testo in 10 secondi in media e una persona lo riempie in un secondo, questo è sospetto e potrebbe essere un'attività spambot. Potresti usare questo per sospettare ma non puoi garantire, gli utenti veloci sono spambots.

C'è una cosa importante qui, spambots e crawler si comportano in modo simile, quindi è davvero difficile (forse impossibile) distinguere questi due.

    
risposta data 15.01.2013 - 19:27
fonte

Leggi altre domande sui tag