Proteggere il proprio webserver e redirect tramite .htaccess

Andiamo ad analizzare delle tecniche essenziali per proteggere il nostro webserver da attacchi estranei così come i più comuni metodi di redirect utilizzando il file .htaccess. Va premesso che per poter utilizzare correttamente tutte le funzionalità seguenti dovete sempre assicurarvi che il vostro hoster ve ne dia la possibilità, non dimenticate quindi mai di chiedere prima di procurarvi un nuovo spazio web. Vi ricordo inoltre che per poter creare un file .htaccess dovrete disporre di un editor di testo non proprio “basilare” (ad esempio Notepad++) oppure dovrete salvare il file come file di testo, caricarlo sul vostro server e procedere con la rinomina direttamente usando il client FTP.

Questo articolo nasce come traduzione dell’articolo “17 Useful Htaccess Tricks and Tips” di kevin.

Generali

I seguenti htaccess ti permetteranno di svolgere semplici procedure di redirect ed ottimizzazione del webserver.

1. Impostare il fuso orario

Molte volte quando usi la funzione date o mktime in php, ti viene mostrato un messaggio simpatico riguardante il fuso orario. Questo è l’unico metodo per risolverlo: settare il fuso orario per il tuo server. Una lista dei fusi supportati può essere trovata qui.

SetEnv TZ Australia/Melbourne

2. Redirect 301 permanenti e SEO Friendly

Che cosa significa SEO Friendly? Attualmente alcuni motori di ricerca hanno la capacità di individuare un redirect 301 e di aggiornare i loro record esistenti

Redirect 301 http://www.queness.com/home http://www.queness.com/

3. Evitare la schermata di download

Solitamente quando cerchi di scaricare qualcosa da un web server, ti viene richiesto di decidere se aprire il file o salvarlo. Puoi impedire che ciò accada utilizzando il codice seguente nel tuo file .htaccess.

AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

4. Skippare il www

Una delle linee guida per un SEO è quella di fare in modo che ci sia un unico tipo di indirizzo che punti al proprio sito web. Di conseguenza occorrerà fare in modo che tutto il traffico proveniente tramite www venga ridirezionato all’indirizzo privo di www o viceversa.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.queness.com [NC]
RewriteRule ^(.*)$ http://queness.com/$1 [L,R=301]

5. Pagina di errore personalizzata

Come creare una pagina persoonalizzata per ogni tipo di errore.

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

6. Comprimere i files

Ottimizza i tempi di caricamento del tuo sito comprimendo i files in modo da ridurne le dimensioni.

# comprimere testo, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

7. Cache dei files

Fai memorizzare i files nella cache in modo da ottimizzare i tempi di caricamento.

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

8. Disabilitare la cache per alcuni tipi di files

D’altra parte è possibile fare in modo che alcuni files che si aggiornano di frequente non vengano memorizzati.

# disabilita esplicitamepte la cache per scripts e altri files dinamici
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>

Sicurezza

I seguenti codici htaccess ti permettono di aumentare il livello di sicurezza del tuo webserver. La protezione dagli hotlink (link diretti) è un buon sistema per evitare ad altra gente di utilizzare immagini memorizzate nel tuo server.

1. Protezione dagli hotlink tramite .htaccess

E’ odioso quando la gente ruba banda dal tuo sito utilizzando immagini che ospiti sul tuo server. Usando questa protezione impedirai che ciò accada.

RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?queness.com/.*$ [NC]
RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

2. Prevenire attacchi hacker

Se vuoi aumentare il livello di sicurezza del tuo sito, puoi utilizzare queste righe per prevenire alcune tecniche comuni di hacking individuando modelli di URL maligni.

RewriteEngine On
# proc/self/environ? no!
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
#Blocca ogni script che cerca di settare un valore mosConfig attraverso l'URL RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR] # Blocca ogni script base64_encode crap RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR] #Blocca ogni script che contiene un tag <script> nell'URL RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR] # Blocca ogni script che cerca di settare una variabile globale PHP via URL RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR] # Blocca ogni script che cerca di modificare una variabile a _REQUEST via URL RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2}) # Invia tutte le richieste bloccate alla pagina di errore 403! RewriteRule ^(.*)$ index.php [F,L]

3. Bloccare l’accesso al file .htaccess

Il codice seguente impedisce l’accesso ad utenti esterni al tuo file .htaccess. Può essere utilizzato anche per altri tipi di files.

# proteggi htaccess file
<Files .htaccess>
order allow,deny
deny from all
</Files>
# previeni la visualizzazione di un file specifico
<Files secretfile.jpg>
order allow,deny
deny from all
</Files>
# tipi di files multipli
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>

4. Rinominare il file .htaccess

Può essere anche utile rinominare il file .htaccess per proteggersi.

AccessFileName htacc.ess

5. Disabilitare la visualizzazione dei contenuti delle cartelle

Impedisci o consenti al server di mostrare l’indice dei files presenti nelle cartelle del tuo server web.

# disabilita la visualizzazione della cartella
Options All -Indexes
# abilita la visualizzazione della cartella
Options All +Indexes

6. Cambiare la pagina index di default

Puoi cambiare la pagina di apertura del sito da index.html, index.php ecc… con qualsiasi altro nome.

DirectoryIndex business.html

7. Blocca i visitatori provenienti da un preciso dominio

# blocca i visitatori provenienti dai domini indicati
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} scumbag.com [NC,OR]
RewriteCond %{HTTP_REFERER} wormhole.com [NC,OR]
RewriteRule .* - [F]
</ifModule>

8. Blocca le richieste basate su un preciso User Agent

Questo metodo può salvare una buona quantità di banda bloccando alcuni bot o spiders in modo che non passino sul tuo sito.

# blocca i visitatori indicati
<IfModule mod_rewrite.c>
SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
</ifModule>

9. Proteggi le cartelle disabilitando l’esecuzione di script

# proteggi le cartelle disabilitando l'esecuzione di script
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI

Copyright e utilizzo del seguente articolo

I sistemi e le tecniche dimostrate in questo tutorial non possono essere utilizzati senza l’attribuzione dei meriti all’autore originale. Non puoi quindi copiare l’intero tutorial (a meno che il permesso non sia accordato), in Inglese o in qualsiasi altra lingua.

Si ringrazia ancora Queness per il permesso accordato.
Thanks to Queness for the permission.