Scopri in che modo la BBC sta implementando HSTS per migliorare la sicurezza e le prestazioni.

La BBC sta implementando HSTS per il sito web al fine di migliorare la sicurezza e le prestazioni. Scopri cosa significa e come HSTS può esserti d'aiuto.

L'adozione di HTTPS è cresciuta costantemente negli ultimi anni. Secondo il 2021 Web Almanac di HTTP Archive, circa il 91% di tutte le richieste per desktop e dispositivi mobili è stato gestito tramite HTTPS. HTTPS non è una soluzione definitiva, ma è un prerequisito necessario per utilizzare funzionalità come Service Worker e protocolli moderni come HTTP/2 e HTTP/3.

Recentemente Neil Craig, un lead Technical Architect presso la BBC, ha twittato che stiamo lentamente implementando HTTP Strict Transport Security (HSTS) per bbc.com. Scopri cosa significa per la BBC e cosa potrebbe significare per te.

Il problema

I server web spesso ascoltano le richieste su entrambe le porte 80 e 443. La porta 80 è per le richieste HTTP non sicure, mentre la porta 443 è per il protocollo HTTPS sicuro. Questo può creare un problema perché, quando inserisci un indirizzo nella barra degli indirizzi senza il prefisso del protocollo https://, come fa la maggior parte degli utenti, alcuni browser indirizzano il traffico alla versione HTTP non sicura di un sito per motivi precedenti (anche se non è sempre così).

Un modo comune per assicurarsi che gli utenti non accedano a una versione non protetta di un sito web è quello di inserire un reindirizzamento da HTTP a HTTPS per tutte le richieste. Questo sicuramente funziona, ma innesca la seguente catena di eventi:

  1. Il server riceve una richiesta HTTP.
  2. Il server invia un reindirizzamento per andare all'equivalente HTTPS della risorsa richiesta.
  3. Il server deve negoziare una connessione sicura con il browser.
  4. I contenuti vengono caricati come di consueto.

Sebbene i reindirizzamenti funzionino correttamente, possono essere configurati in modo errato in modi che consentono comunque l'accesso alla versione non sicura di un sito. Anche se tutto è configurato correttamente, esiste comunque un problema di sicurezza perché l'utente si connetterà comunque tramite HTTP non sicuro durante la fase di reindirizzamento, esponendo gli utenti alla possibilità di pericolosi attacchi man in the middle.

Inserisci HSTS

Supporto dei browser

  • Chrome: 4.
  • Edge: 12.
  • Firefox: 4.
  • Safari: 7.

Origine

Il protocollo HSTS è dettato dall'intestazione della risposta HTTP Strict-Transport-Security per le richieste HTTPS. Se impostato, le visite di ritorno a un sito web attivano un reindirizzamento speciale noto come "Reindirizzamento interno 307", ovvero quando il browser gestisce la logica di reindirizzamento, anziché il server. In questo modo la richiesta non viene intercettata perché non lascia mai il browser, quindi è più sicura. Inoltre, questi tipi di reindirizzamento sono estremamente veloci, pertanto viene eliminata qualsiasi latenza evidente durante un hop da HTTP a HTTPS.

Un reindirizzamento interno 307 da HTTP a HTTPS, attivato da un'intestazione HSTS. Il reindirizzamento 307 richiede solo 2 millisecondi.

Analogamente alla sintassi dell'istruzione max-age di Cache-Control, un'intestazione HSTS specifica un'istruzione max-age. Questa istruzione assume un valore in secondi che specifica per quanto tempo viene applicato il criterio:

Strict-Transport-Security: max-age=3600

Nell'esempio precedente, il criterio deve essere applicato solo per un'ora.

Deployment di HSTS

Lo svantaggio principale dell'implementazione di HSTS è se non intendi trattare la tua origine come strettamente sicura. Supponiamo che tu abbia una serie di sottodomini da cui gestisci le risorse, ma forse non tutti sono sicuri. In questo scenario, un'intestazione HSTS potrebbe interrompere il sito web.

La BBC ha adottato l'approccio giusto nell'implementazione di HSTS. Come ha menzionato Neil Craig nel suo tweet, il valore iniziale impostato per bbc.com era max-age=10.

Con questo approccio, il criterio è stato applicato inizialmente solo per dieci secondi. Questo non offre un grande vantaggio, ma l'idea è quella di verificare se potrebbero esserci problemi con l'applicazione di HSTS. Con il passare del tempo, puoi aumentare il criterio in modo incrementale e vedere se si verificano problemi. Al momento della stesura del presente documento, bbc.com sta specificando un criterio HSTS max-age=86400, che quasi certamente aumenterà nel tempo.

Sicuramente non vorrai uscire dal controllo con un valore lungo max-age quando esegui il deployment di HSTS. All'improvviso potresti ritrovarti a cercare di risolvere dei problemi mentre gli utenti riscontrano problemi. Inizia in piccolo e incrementa nel tempo. Quando hai la certezza che tutto funzioni correttamente, puoi impostare l'istruzione max-age su un periodo di tempo molto più lungo. Quando l'implementazione sarà completata, ti consigliamo di impostare max-age su uno o due anni.

Navigazione iniziale più rapida e sicura con l'elenco di precaricamento HSTS

Un criterio HSTS diventa effettivo solo dopo la prima visita a un sito web, quindi i vantaggi non sono presenti per la prima visita al sito. Questa operazione richiederà comunque il reindirizzamento non sicuro. Tuttavia, puoi precaricare il criterio HSTS inviando il sito web all'elenco di precaricamento HSTS, un elenco impostato come hardcoded di siti web che il browser riconosce esclusivamente come HTTPS. Quando il tuo sito è nell'elenco di precaricamento, anche la prima visita è protetta e il reindirizzamento da HTTP a HTTPS sarà immediato.

Fai una prova

Se la BBC ha voglia di testare HSTS, ci sono buone probabilità che tu possa fare lo stesso con il tuo sito web. Provate il vostro sito web e, se volete migliorare, aggiungetelo all'elenco di precaricamento HSTS quando avete la certezza che non esistano bug, per offrire agli utenti un'esperienza più sicura e più veloce.