Come effettuare blocchi tramite .htaccess

In questa guida verrà spiegato come effettuare dei blocchi tramite .htaccess.  Il blocco degli user agent è stato già trattato in questo articolo tuttavia a volte può essere necessario effettuare un blocco per singolo IP, per un intero range o magari bloccare l’esecuzione di qualche risorsa presente sul sito. Nella maggior parte dei casi questo blocco, tramite IP,  viene messo in atto quando si ha un blog (o forum) e qualche utente, per lo più in caso si tratti di troll,  disturba/inserisce commenti inappropriati/flamma (vedi flame). In questa guida saranno indicati i metodi più comuni per bloccare bot, injection ed altro.

File .htaccess

Il file .htaccess è un file di configurazione che viene supportato ed utilizzato da diversi webserver. Viene utilizzato principalmente per la riscrittura delle URL, redirect o controllo dell’accesso.  Viene scritto con il punto iniziale in quanto file nascosto. Un sito può avere più di un file .htaccess dove i file si possono trovare all’interno della web directory.

Di seguito verranno riportati alcuni esempi di blocchi effettuabili tramite file .htaccess. Questi blocchi vanno ponderati bene prima di inserirli in quanto possono causare problemi anche alla navigazione per altri utenti e/o problemi di navigazione sul sito.

Bloccare qualsiasi richiesta da chiunque si usa questa sintassi

Require all denied

Permettere l’accesso a chiunque si usa questa sintassi

Require all granted

Bloccare un hostname

<RequireAll>
    Require all granted
    Require not host dominio.tld
</RequireAll>

dove dominio.tld è l’hostname da bloccare.

Bloccare uno specifico indirizzo IP

<RequireAll>
    Require all granted
    Require not ip XXX.XXX.XXX.XXX
</RequireAll>

dove XXX.XXX.XXX.XXX è l’indirizzo IP da bloccare.

Bloccare un intero range IP

<RequireAll> 
Require all granted 
Require not ip XXX.XXX.XXX
</RequireAll>

dove XXX.XXX.XXX è l’inizio degli IP della subnet da bloccare. In questo modo qualsiasi sia l’IP, se inizierà con XXX.XXX.XXX verrà bloccato.

Bloccare l’accesso ad un file specifico per un indirizzo IP specifico

<Files ~ "file\.ext">
    <RequireAll>
        Require all granted
        Require not ip XXX.XXX.XXX.XXX
    </RequireAll>
</Files>

dove all’IP XXX.XXX.XXX.XXX viene negato l’accesso al file.ext

Bloccare l’accesso ad un IPv6

<RequireAll>
    Require all granted
    Require not ip 2001:0db8:0000:0000:0000:0000:1428:57ab
</RequireAll>

dove 2001:0db8:0000:0000:0000:0000:1428:57ab è un esempio di IPv6 che si vuole bloccare.

Redirect in base all’IP

<IfModule mod_rewrite.c>
    RewriteCond %{REMOTE_ADDR} ^XXX\.XXX\.XXX\.XXX$
    RewriteRule .* /file.php [R=301,L]
</IfModule>

dove se la richiesta viene eseguita dall’IP XXX.XXX.XXX.XXX viene eseguito un redirect verso un file o una pagina specifica.

Bloccare l’accesso al file wp-config.php di WordPress

<files wp-config.php>
    order allow,deny
   deny from all
</files>

Bloccare l’esecuzione di qualsiasi file PHP

<Files *.php>
    deny from all
</Files>

Questo codice è consigliato per la cartella wp-content/uploads di WordPress.

Dove qualsiasi file .php, presente nella cartella/sottocartella in cui viene inserita questa direttiva, non viene eseguito.

Bloccare l’esecuzione di tutte le estensioni tranne quelle dichiarate nell’htaccess

Order deny,allow
    Deny from all
    <Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar|etf|ttf|otf|woff|less)$">
    Allow from all
</Files>

Questo codice è consigliato per la cartella wp-content/uploads di WordPress.

Dove qualsiasi file, ad eccezione di quelli  indicati nella rirettiva, presente nella cartella/sottocartella in cui viene inserita questa direttiva, non viene eseguito.

Bloccare l’accesso al file .htaccess dall’esterno

<files ~ "^.*\.([Hh][Tt][Aa])">
    order allow,deny
    deny from all
    satisfy all
</files>

Con questa direttiva viene bloccato qualsiasi tentativo di accesso al file .htaccess dall’esterno.

Bloccare l’accesso a tutti i dotfile

RewriteRule (^\.|/\.) – [F]

Con questa direttiva si blocca l’esecuzione di qualsiasi dotfile (i file che iniziano per .qualcosa. Ad esempio .htaccess, .maintenance ecc ecc)

Bloccare l’accesso al file xmlrpc.php di WordPress

<Files xmlrpc.php>
    order deny,allow
    deny from all
</Files>

Il file xmlrpc.php può essere usato per effettuare accessi non autorizzati a WordPress. E’ quindi consigliabile bloccarlo.

Bloccare le injection remote

RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})

Inserendo questo codice alcune tipologie di richieste da remoto vengono bloccate.

Bloccare alcune richieste di tipo XSS

<IfModule mod_headers.c>
  Header set X-XSS-Protection "1; mode=block"
</IfModule>

Inserendo questo codice la direttiva X-XSS-Protection proteggerà il sito dalle vulnerabilità di tipo reflected.

Bloccare lo sniffing del MIME-Type

<IfModule mod_headers.c>
  Header set X-Content-Type-Options nosniff
</IfModule>

Bloccare il click-jacking tramite iframe

<IfModule mod_headers.c>
    Header always append X-Frame-Options SAMEORIGIN
</IfModule>

Tramite questa direttiva sarà impossibile incorporare tramite iframe il sito in un’altra pagina web.