2010
Feb
24

Usare il file “.htaccess” per bloccare gli accessi

googlebot1.jpg 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.

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 codice403 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.

Admin