Usare il file “.htaccess” per bloccare gli accessi
Attenzione
Questo articolo è stato pubblicato più di un anno fa, potrebbero esserci stati sviluppi.
Ti preghiamo di tenerne conto.
A chiunque sia capitato di monitorare gli accessi di un sito sarà capitato di imbattersi in accessi molto simili fra loro, spesso si tratta di crawler (lo stesso Google utilizza un sofisticato tipo di crawler chiamato GoogleBot). Parafrasando Wikipedia:
Un crawler (detto anche spider o robot), è un software che analizza i contenuti di una rete (o di un database) in un modo metodico e automatizzato, in genere per conto di un motore di ricerca.
Solitamente i crawler sono innocui, creano un limitatissimo traffico all’interno del sito (se fatti bene) per offrire il servizio di indicizzazione che tutti ben conosciamo ed apprezziamo. [more]
Esistono però dei crawler che, con gli stessi meccanismi dei crawler di indicizzazione, scansionano il web alla ricerca di falle nel codice delle pagine. Come sappiamo non sempre i webmaster sono attenti nella programmazione, e a volte veniamo a conoscenza di alcune falle nella sicurezza del sito (o portale). Questi crawler dannosi esplorano in lungo e in largo il web, indicizzando le pagine per se stessi al fine di poter “bucare” il sito, ed avere accesso al server o peggio a dati sensibili.
Inoltre, oltre a non farci un buon servizio di indicizzazione, aumentano l’uso della banda, costringendo il navigatore a visitare il sito più lentamente. Insomma… oltre al danno la beffa.
È però possibile tramite un semplicissimo file di testo bloccare l’accesso a determinati IP o “user agent” una volta individuati. Sto parlando del file “.htaccess”.
Il file “.htaccess” è un file di configurazione utile al server, uno strumento molto semplice, ma altrettanto potente, e non può essere usato con leggerezza. Un errore nella configurazione del file potrebbe inibire al webmaster l’accesso alle proprie pagine, per cui andiamoci cauti.
Il metodo più sicuro per sapere se lo “user agent” che ha fatto di recente visita al sito è un crawler dannoso è una ricerca su Google. Cerchiamo separatamente lo “user agent” e l’indirizzo IP dal quale ci è arrivata la richiesta.
Blocco del bot tramite “.htaccess”
Questo esempio, e tutti i successivi, possono essere aggiunti in fondo al file “.htaccess”, sempre che sia stato creato. Se non è già esistente è possibile crearlo: un semplice file di testo che chiameremo “.htaccess” andrà messo nella “root directory” del server.
#sbarazziamoci del bot RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^BadBot RewriteRule ^(.*)$ http://go.away/
Che fa questa parte di codice? Semplice. Le poche righe qui sopra dicono al server di controllare ogni accesso il cui “user agent” inizi con “BadBot”. Quando ne trova uno che coincide lo reindirizza ad un indirizzo non esistente chiamato “http://go.away/”.
Ora vediamo come bloccarne più di uno:
#sbarazziamoci dei bot RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^BadBot [OR] RewriteCond %{HTTP_USER_AGENT} ^EvilScaper [OR] RewriteCond %{HTTP_USER_AGENT} ^FakeUser RewriteRule ^(.*)$ http://go.away/
Il codice di qui sopra fa esattamente le stesse cose che faceva il primo, in questo caso blocca tutti gli “user agent” che iniziano con “BadBot”, “EvilScraper”, “FakeUser”. Notare che quando c’è più di un bot da bloccare è necessario mettere “[OR]” alla fine della riga di tutte le regole, tranne che all’ultima.
Blocco dei “ladri” di banda
Chi naviga di solito non lo sa, ma spesso accade che per non appesantire il proprio server (o per semplice ignoranza) alcuni webmaster includano delle immagini residenti altrove nelle proprie pagine. Questo alleggerisce il carico del server che non ha l’onere di ospitare l’immagine, ma appesantisce il traffico sul server in cui l’immagine risiede, senza contare che il secondo server non ha alcuna pubblicità dal lavoro svolto.
Visto che non possiamo permetterci di cambiare a rotazione le immagini del nostro sito, anche in questo caso “.htaccess” ci viene in aiuto.
RewriteEngine on RewriteCond %{HTTP_REFERER} ^http://.*somebadforum\.com [NC] RewriteRule .* - [F]
In questo modo “somebadforum.com” sarà reindirizzato ad un codice “403 Forbidden” per ogni immagine inclusa. Il risultato finale sarà il classico simbolo di immagine mancante (broken image), e la banda del nostro server sarà salva.
Per bloccare più di un sito questo è il codice:
RewriteEngine on RewriteCond %{HTTP_REFERER} ^http://.*somebadforum\.com [NC,OR] RewriteCond %{HTTP_REFERER} ^http://.*example1\.com [NC,OR] RewriteCond %{HTTP_REFERER} ^http://.*example2\.com [NC] RewriteRule .* - [F]
Come sopra, notare sul finale di ogni riga “OR”, ad eccezione dell’ultima.
Bannare gli IP
Può anche capitare che i bot si facciano furbi, e a rotazione cambino il loro “user agent”, in modo da avere continuo accesso alle pagine del sito. Quando capita questo fenomeno uno dei modi per bloccare l’accesso al bot “fantasioso” è bloccare l’IP (bloccarlo solo se c’è un continuo accesso dallo stesso IP). Sempre nel nostro fidato “.htaccess” aggiungiamo le seguenti righe:
order allow,deny deny from 192.168.44.201 deny from 1.2.3.4 deny from 5.6.7.8 allow from all
In questo esempio blocchiamo tre indirizzi IP, con l’ultima riga garantiamo l’accesso a tutti gli altri. Ma è anche possibile bloccare l’accesso alla radice dell’indirizzo (es. 192.168.*):
order allow,deny deny from 192.168. deny from 100.29. deny from 500.699. allow from all
Con queste regole tutti gli indirizzi IP che iniziano con “192.168.” (e seguenti) verranno bloccati.
Suggerisco sempre di creare un backup di “.htaccess”, non sempre le cose vanno come vogliamo, e non sarebbe utile a nessuno non avere più l’accesso al proprio server. Gli hoster più diffusi offrono il supporto al file “.htaccess”, nel caso in cui il tuo hoster non offrisse tale supporto credo sia il caso di cambiare hoster.
5 commenti
Stefano · 15 Marzo 2018 alle 11:50 AM
Ciao! complimenti per l’articolo, avrei una domanda, sarebbe possibile, sempre dal .htaccess, bloccare tutti gli indirizzi ip alcuni selezionati? (deny from all allow
from xxxx)
Grazie! 😀
TheJoe · 17 Marzo 2010 alle 1:25 PM
sure, and we can instead deny the access always using the dns.. htaccess is a big resource..
and of course thanks for the comment!
Poker · 17 Marzo 2010 alle 12:26 AM
We can also use dns instead of ip for the allow in the htaccess.
TheJoe · 6 Marzo 2010 alle 8:01 AM
Ciao Lu,
grazie per il feedback, in effetti non ho specificato il tipo di server.. davo per scontato che venisse usato apache (il più usato). Solitamente poi chi fornisce il servizio di hosting su server apache fornisce anche il supporto ad “.htaccess” (parlo dei maggiori hoster italiani: aruba, register e compagnia).
Mi fa piacere che mi commenti gli articoli interessanti, ma all’una di notte non hai di meglio da fare che leggere i miei articoli su htaccess?? ahah!!
Luca Canducci · 6 Marzo 2010 alle 1:09 AM
Interessante serie di articoli. Ricorda di specificare che tutto questo vale se il web server è Apache (anche se la maggior parte dei servizi di hosting fornisce proprio Apache) oltre al fatto che ovviamente sia abilitata (o abilitabile) la gestione dei file “.htaccess”.
Altro dettaglio interessante, c’è la possibilità di dare un nome diverso da “.htaccess” ai file per le configurazioni specifiche, anche se solitamente nei servizi di hosting non è possibile una configurazione di grana così fine.
😀