Header di sicurezza
Vediamo alcuni header HTTP che possono essere utilizzati per migliorare la sicurezza dell'applicazione web.
Strict-Transport-Security
Quando un utente tenta di connettersi a un sito con protocollo http, il comportamento corretto per far sì che venga utilizzato il protocollo https va oltre un semplice redirect.
Questo poiché redirezionare su https e basta renderebbe l'applicazione vulnerabile a SSL Stripping, un tipo di attacco man-in-the-middle.
Questo poiché se il sito accetta connessioni http, il visitatore potrebbe inizialmente comunicare con la versione non criptata del sito, dando adito ad attacchi man-in-the-middle che sfruttano la redirezione per indirizzare l'utente verso un sito malevolo. Il metodo corretto consiste nel far sì che il browser esegua la redirezione verso https; questo può essere fatto tramite HTTP Strict Transport Security (HSTS).
Attraverso l'header Strict-Transport-Security è possibile istruire il browser tramite le seguenti direttive:
max-age=<expire-time>: Il tempo in secondi per cui il browser deve ricordare che il sito che ha inviato l'header deve essere acceduto tramite https.includeSubDomains: Se questa direttiva è presente, la politica di accesso va estesa anche a tutti i sotto-domini del sitopreload: Google mantiene un servizio di preload HSTS; seguendo le linee guida e inviando il proprio dominio è possibile assicurarsi che i browser so connetteranno al dominio inviato solo tramite connessioni https. Se questa direttiva viene utilizzata, è necessario che la direttivaincludeSubDomainssia presente e chemax-agesia31536000(un anno) o più.
Dopo essersi connessi al dominio con https, il browser che riceve l'header Strict-Transport-Security memorizza le informazioni in esso contenute. Una volta scaduto il tempo il browser potrà continuare a connettersi in HTTP.
Ogni volta che il browser riceve l'header di HSTS il tempo di connessione sicura del sito che ha inviato viene aggiornato.
Inviare un header HSTS con max-age=0 fa scadere le politiche di Strict-Transport-Security.
X-Content-Type-Options
I browser utilizzano il MIME Type per identificare la natura e il formato di un documento.
Il MIME Type può essere dichiarato esplicitamente mediante l'header Content-Type.
I browser moderni, se l'header Content-Type non è presente, provano a dedurre il MIME Type dal contenuto ricevuto.
Questo comportamento è detto content sniffing, e un attaccante può sfruttarlo per degli attacchi detti MIME confusion attack.
Le versioni più vecchie dei browser potevano addirittura "non fidarsi" del MIME Type presente nell'header Content-Type e tentare comunque di derivarlo tramite degli algoritmi di content sniffing. È possibile istruire il browser per non inferire mai il MIME Type tramite il content sniffing e utilizzare sempre l'header Content-Type (se è presente) attraverso l'header
X-Content-Type-Options: nosniff