Come posso rilevare e bloccare i bot?

9

Ad esempio, se sono su StackOverflow e aggiorno la mia pagina più volte di seguito, inizia a pensare di essere un bot e mi blocca.

Come posso costruire qualcosa di simile nel mio sito?

    
posta JD Isaacks 24.06.2011 - 17:57
fonte

4 risposte

10

Usa Roboo: link

Demoed a Blackhat nel 2011. Molto efficace e facile da installare. Consiglierei su qualsiasi utilizzo di CAPTCHA

"Roboo utilizza meccanismi di sfida / risposta HTTP avanzati non interattivi per rilevare e successivamente mitigare i robot HTTP, verificando l'esistenza di stack HTTP, HTML, DOM, Javascript e Flash sul lato client.

Questo livello di verifica approfondito elimina la maggiore percentuale di robot HTTP che non utilizzano browser reali o implementano stack di browser completi, con la conseguente riduzione di varie minacce Web:

  • Strumenti di negazione del servizio HTTP - ad es. Cannone a ioni a bassa orbita
  • Scansione delle vulnerabilità - ad es. Scanner delle vulnerabilità Web di Acunetix, Metasploit Pro, Nessus Exploit web
  • Poster di commenti automatici / spam di commenti in sostituzione dei metodi CAPTCHA convenzionali
  • Spider, crawler e altri malvagi robotici

Inoltre buona misura contro DDOS: link

    
risposta data 24.06.2011 - 21:10
fonte
4

Come tutto ultimamente, puoi eseguire il rollover della tua soluzione o utilizzare software as a service. Ci sono alcuni servizi web che fanno questo genere di cose, se sei a tuo agio con un possibile compromesso nella privacy dei visitatori.

Il più notevole è forse Cloudflare che può essere configurato come protezione di base (gratuita) o avanzata (a pagamento). È una startup molto popolare ultimamente con molti siti che la usano.

Funziona come proxy trasparente di fronte al tuo sito web e controlla le richieste in arrivo in base a vari criteri, utilizzando un vasto crowdsourcing su dove provengono i dati e se qualcuno ha già visto l'IP fare cose maligne in precedenza. Le fonti di dati includono database aperti come link . Quindi presenta a quegli utenti una pagina di prova che chiede di verificare, magari completare un captcha. Definisce "minacce" come zombi di botnet, spammer di massa, ecc. Nella versione a pagamento funziona anche come un WAF, cercando di catturare i tentativi di iniezione di sql / xss.

    
risposta data 26.06.2011 - 21:40
fonte
3

Per prima cosa, devi valutare quali parti della tua applicazione sono a rischio di essere automatizzate per ottenere qualche tipo di vantaggio. Ad esempio, che cosa si ottiene ricaricando più volte la pagina StackOverflow? Forse un bot da un utente per aumentare i numeri di vista sulle proprie domande / risposte?

Il prossimo è determinare quale comportamento costituisce un possibile bot. Per il tuo esempio di stackoverflow, potrebbe essere un certo numero di caricamenti di pagina in un determinato intervallo di tempo da un singolo utente (non solo basato su IP, ma forse agente utente, porta di origine, ecc.)

Successivamente, costruisci il motore che contiene queste regole, raccoglie i dati di tracciamento, controlla ogni richiesta di analisi in base ai criteri e contrassegna i client come bot. Penso che vorrai che questo motore funzioni contro i log web e non contro le richieste live per motivi di prestazioni, ma potresti caricare questo test.

Immaginerei che il sistema funzioni in questo modo (usando l'esempio di stackoverflow): il motore legge una voce di log di un hit web, quindi lo aggiunge al suo database di webhits, aggregando quel hit con tutti gli altri hit di quell'utente unico su quella pagina univoca e registra il timestamp, in modo che vengano registrati due timestamp, quello del primo hit della serie e quello del più recente, e il numero totale di hit della serie sia incrementato.

Quindi interrogare quell'elenco sottraendo il tempo del primo hit dal momento dell'ultimo per tutte le serie che hanno un hit count oltre la soglia. Gli utenti unici che non superano il controllo sono contrassegnati. Quindi sul front-end è sufficiente controllare tutti i risultati rispetto a quella lista di utenti segnalati e agire di conseguenza. Certo, il mio algoritmo è difettoso come l'ho appena pensato su due piedi.

Se cerchi google, scoprirai che c'è un sacco di codice gratuito in lingue diverse con questa funzionalità. Il trucco sta nel pensare le giuste regole per segnalare il comportamento dei bot.

    
risposta data 24.06.2011 - 20:13
fonte
2

Sarebbe abbastanza semplice avere un servizio che cerca i tentativi di connessione e ogni volta che si verificano più tentativi in rapida successione dallo stesso indirizzo IP, aggiunge quell'indirizzo a una "lista nera" di account bloccati. (Oppure, se vuoi essere attraente, avvia qualche applicazione / query per far verificare alla persona che non sono un bot)

In cima alla mia testa (non l'ho mai provato) direi che potresti tenere un dizionario di dimensioni fisse degli indirizzi IP con le chiavi che sono l'ultima volta che hanno fatto un tentativo di connessione e quando i tempi sono troppo vicino li blocca .. o in alternativa il dizionario ordina 'cancella' se stesso di valori più vecchi di x quantità di tempo, e incrementa la chiave di ogni valore per ogni connessione in quel periodo di tempo .. se ce ne sono troppi nella 'x' periodo di tempo, sono bloccati.

Una risposta vaga, lo so, ma spero che aiuti!

    
risposta data 24.06.2011 - 19:48
fonte

Leggi altre domande sui tag