Esistono diverse tecniche per innalzare il livello di sicurezza di un sito web alcune piuttosto complesse altre, viceversa, abbastanza semplici a livello implementativo. In questo articolo vi presenterò alcuni semplici tip che vi consentiranno, con poca fatica, di implementare una maggior sicurezza delle vostre pagine web attraverso l’aggiunta di poche istruzioni all’interno del file .htaccess.
In pratica vedremo come aggiungere, attraverso .htaccess, i cosiddetti Security Headers a protezione di alcuni aspetti fondamentali del vostro sito web.
Cos’è il file .htaccess
Il file .htaccess è un comune file di testo che viene utilizzato dai gestori dei siti web per impostare alcune configurazioni del web-server Apache.
Attraverso il file .htaccess è possibile, ad esempio, impostare la pagina di default, creare dei redirect o settare degli headers.
Usare .htaccess per implementare la sicurezza del sito
In questo articolo vedremo tre headers specifici per la sicurezza del tuo sito. I coici proposti serviranno per aggiungere intestazioni di sicurezza extra a tutte le risorse del sito web. In particolare vedremo come aggiungere intestazioni X-Security per la protezione da eventali attacchi di cross-site scripting (XSS), incorporazione all’interno di frame e content-sniffing.
Protezione dagli attacchi XSS
Per prima cosa, vediamo come aggiungere un’intestazione X-Security per proteggere da eventuali attacchi di Cross-Site Scripting. Si tratta di una tecnica informatica che affligge i siti web dinamici che non effettuano sufficienti controlli sugli input degli utenti, i quali possono sfruttare tale vulnerabilità inserendo script lato client nelle pagine del sito web.
Per fare ciò è sufficiente aggiungere la seguente direttiva al file .htaccess nella root del sito:
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode = block"
</IfModule>
Per attivare la protezione da XSS non sono necessarie modifiche o personalizzazioni del codice, è sufficiente un banale copia e incolla. Questo codice funziona aggiungendo l’intestazione X-XSS-Protection alle risposte del server. La maggior parte dei browser moderni riconosce questa intestazione e la utilizzerà per proteggere il tuo sito dagli attacchi di tipo XSS.
Protezione da click-jacking (evitare l’incorporazione di un sito all’interno di frame)
Un’altra utilissima intestazione che vi consiglio di aggiungere all’interno del vostro file .htaccess riguarda la prevenzione del click-jacking. Attraverso questa tecnica fraudolenta un malintenzionato potrebbe utilizzare le pagine del vostro sito web per rubare i dati dei vostri utenti!
Grazie ad un’intestazione X-Security, tuttavia, è possibile impedire che le pagine del nostro sito vengano incorporante all’interno di altre pagine web che, appunto, potrebbero essere utilizzate per il click-jacking.
Di seguito il codice da aggiungere al file .htaccess:
<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>
Anche in questo caso non sono necessarie modifiche. Questo codice funziona aggiungendo l’intestazione X-Frame-Options alle risposte del server, codice che la maggior parte dei browser moderni comprende e riconosce impedendo, di conseguenza, l’incorporazione delle pagine del sito all’interno di frame (a mano che il frame non si trovi nello stesso dominio).
Protezione contro lo sniffing
Un altro rischio dal quale è possibile difendersi è lo sniffing del MIME-Type. Anche in questo caso possiamo mitigareil problema con un’intestazione X-Security. Di seguito il codice da aggiungere al file .htaccess:
<IfModule mod_headers.c>
Header set X-Content-Type-Options nosniff
</IfModule>
Ancora una volta non ci sono modifiche da fare. Basta copiare il codice ed il gioco è fatto. Questo codice comporta l’aggiunta dell’intestazione X-Content-Type-Options alle risposte del server. La maggior parte dei browser Web moderni comprende questa intestazione e la utilizzerà per garantire i tipi MIME appropriati per tutte le risorse caricate (ad esempio, CSS, JavaScript, font, immagini, video, ecc.).
HTTP Strict-Transport-Security (HSTS)
Attraverso la direttiva HTTP Strict-Transport-Security (abbreviata con HSTS) il sito web informa il browser che i contenuti sono visualizzabili esclusivamente attraverso connessioni sicure. Aggiungendo questa direttiva, quindi, il browser convertitrà automaticamente tutti i tentativi di accesso al sito utilizzando HTTP in richieste HTTPS senza generare inutili redirect. Di seguito il codice da aggiungere al file .htaccess:
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000"
</IfModule>
La direttiva "max-age" indica per quanto tempo il browser deve ricotrdare questa informazione (nel nostro esempio per 1 anno).
L’header in questione accetta diversi flag che ne rafforzano la portata:
- preload: la direttiva viene salvata nella cd. HSTS preload list per essere applicata già alla prima visita;
- includeSubDomains: l’header applicato al dominio principale si estende a tutti i suoi sotto-domini.
Nella forma più completa, quindi, la direttiva HSTS apparirà così:
Header set Strict-Transport-Security "max-age=31536000" includeSubDomains; preload
Attraverso questa direttiva stiamo dicendo al mondo che il nostro sito, compresi tutti i suoi sotto-domini, accetta sempre e solo connessioni in HTTPS.
Combinare tutte le intestazioni X-Security
Ora che abbiamo visto le intestazioni X-Security che vogliamo aggiungere, combiniamole in un singolo frammento di codice:
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode = block"
Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
Header set Strict-Transport-Security "max-age=31536000"
</IfModule>
Verifica delle nuove intestazioni
Dopo aver implementato queste nuove intestazioni X-Security, è possibile verificarne il corretto funzionamento utilizzando un’estensione del browser come, ad esempio, HTTP Header Spy di Google Chrome (disponibile qui) oppure HTTP Header Live per Firefox (disponibile qui) oppure, in alternativa, effettuare un controllo mediante un qualche tool online come, ad esempio, quello disponibile su securityheaders.com.
Se l’implementazione dei nuovi header è andata a buon fine dovreste vedere il risultato corrispettivo all’interno delle intestazioni HTTP scambiate tra il client ed il server al momento del download della pagina web.