• User

    Come evitare che i bot intasino il sito

    Ciao
    ieri conreollando gli accessi da analytics mi sono accorto che da Roma qualcuno stava visualizzando circa 40 pagine ogni minuto e questo almeno da 20/30 minuti. Io pubblico dati di influencer per cui credo si trattasse di qualche bot amatoriale finalizzato ad acquisire i dati degli influencer.

    La cosa a me non andava bene, vuoi perché toglie banda agli utenti reali (che sono già molti) vuoi perché io per quei dati impiego 30 minuti ogni giorno.

    Arrivo al punto. Decido così di mettere in piedi un sistema di tracciamento degli accessi per limitare a 150 pagine le visite giornaliere, più che sufficienti anche per l'utente più assiduo. La mia paura però è di bloccare anche i bot utili, primo fra tutti quello di google.

    Per far questo ho messo in white list gli user-agent "%bot%"
    ma non sono sicuro funzioni.

    Qualcuno ha già avuto affrontato problemi simili? Come ne siete usciti?
    Grazie


  • Moderatore

    Ciao @daniele1974 ,
    solitamente in caso di "attacchi" bot (anche se è più una scansione massiva) il sistema migliore è mettere un servizio tipo CloudFlare.
    Passando al loro sistema di fatto "davanti" al tuo sito hai un loro proxy che ti filtra i bot in base a delle regole che decidi.
    Oppure puoi scegliere di fare un ban o ridurre banda a chi fa troppe connessioni.

    Andare a lavorare lato sistemistico sul webserver è davvero lunga se non si è esperti a mio avviso.


  • Moderatore

    Ciao
    aggiungo che non tutti i Bot sono malevoli. Su Analitycs c'è un apposito flag per togliere il traffico da Bot ma non sempre funziona.

    Ps. Cerca "google analytics bots and spider" se ti serve quella funzione.


  • User

    Grazie per le risposte.
    Il filtro che ho messo in piedi con alcune semplici righe di codice per ora funziona.
    Lascio libero accesso ai vari bot dei motori di ricerca mentre limito a 150 accessi tutti gli altri in modo da impedire azioni di scraper.

    Solo oggi ho registrato circa 7000 accessi da bot (non rilevati da analytics) mentre non ho più registrato quegli accessi sospetti che ho notato ieri, forse grazie proprio allo script che già ieri li ha bloccati dopo la soglia di 150.

    Per ora monitoro gli accessi in modo, se dovesse servire, di inserire alcuni ip in black-list.


    sermatica 1 Risposta
  • Moderatore

    @daniele1974 ha detto in Come evitare che i bot intasino il sito:

    Il filtro che ho messo in piedi con alcune semplici righe di codice per ora funziona.
    Lascio libero accesso ai vari bot dei motori di ricerca mentre limito a 150 accessi tutti gli altri in modo da impedire azioni di scraper.

    Ciao
    come li filtri? Come fai a sapere che non è Google? Come fai a sapere che altri Bot non si presentino come Google?

    P.s.
    Quindi li blocchi sull'accesso al Server?


    D 1 Risposta
  • User

    @sermatica il modo corretto per lasciare la porta aperta solo a Google sarebbe quello di risalire all'host dall'ip, cosa fattibile ma un po' lenta per me, questo perchè i bot google non hanno sempre lo stesso ip.
    Io uso una regex per far passare di fatto tutti i bot e per bloccare a 150 visite tuttie le combinazioni browser-IP, perché i tentativi sospetti mi arrivavano da scraper "casalinghi".
    Sto loggando tutti gli accessi per IP per cui se dovessi notare accessi sospetti potrei mettere in black list alcuni IP.


    G 1 Risposta
  • Super User

    @daniele1974

    Puoi bloccarli per range di ip dal file .htaccess del sito.

    Probabilmente su google trovi anche la lista degli ip dei bot piu comuni.


  • Admin

    Per consentire i Googlebot legittimi basta fare un reverse DNS.

    if(preg_match('/Googlebot/i',$_SERVER['HTTP_USER_AGENT'])){
            // Ti stai dichiarando Googlebot. Ok vediamo se sei un impostore.
            $ip = $_SERVER['REMOTE_ADDR'];
            $name = gethostbyaddr($ip);
            // Bene ora sappiamo il tuo nome. Verifichiamo la corrispondenza con l'IP.
            $host = gethostbyname($name);
            if(preg_match('/Googlebot/i',$name)){
                if ($host == $ip){
                     echo 'Ok sei tu!'
                } else {
                     echo 'Stai provando a fregarmi brutto impostore!'
                }
            } else {
                echo 'Stai provando a fregarmi brutto impostore!'
            }
        } else {
            echo 'Puoi andare dove vuoi. Non sei Googlebot, ma sei onesto.'
        }
    

    In ogni caso ci sono strumenti ottimi per automatizzare tutto questo. Un esempio è CSF. Facilmente installabile e configurabile.

    In alternativa puoi usare rate limit che è facilmente implementabile sia in Apache che Nginx. Se sei su Apache c'è anche il buon Mod_Qos che serve proprio a limitare i bot.