Cookie Questo sito conserva solo ciò che serve per funzionare. Al momento non ci sono né statistiche né pubblicità, e nulla di quanto trovi qui ti segue su altri siti. Leggi l’informativa sulla privacy

Scegli cosa consentire
+92 312 8299940Preventivo gratuito
Blog

HSTS: come aggiungere Strict-Transport-Security senza rischi

HSTS spiegato in modo semplice: cosa protegge l’header Strict-Transport-Security, come aggiungerlo in htaccess e alzare max-age.

By the Denwix team 7 min read

Cos’è HSTS?

HSTS sta per HTTP Strict Transport Security. È un solo header di risposta, Strict-Transport-Security. Dice al browser: per questo sito, usa solo HTTPS da adesso in poi.

Quando il browser ha visto l’header, trasforma ogni link http:// in https:// prima di inviare qualcosa. Inoltre non lascia che il visitatore ignori un avviso sul certificato. Di conseguenza nessuno può riportare di nascosto quel visitatore su HTTP.

Schema: il browser riceve l’header HSTS, ricorda di usare solo HTTPS e poi va diretto su HTTPS
HSTS trasforma un redirect singolo in una regola che il browser ricorda.

Il buco che HSTS chiude

Quasi tutti i siti fanno già il redirect da HTTP a HTTPS. Va bene, ma resta un buco. La primissima richiesta parte ancora in HTTP semplice, e solo dopo il server risponde con il redirect.

Su un Wi-Fi pubblico quella prima richiesta è il momento debole. Un attaccante sulla stessa rete può rispondere per primo e tenere il visitatore su una falsa copia HTTP del sito. Questo trucco si chiama SSL stripping.

HSTS elimina quel momento per ogni visita dopo la prima. Poiché il browser conosce già la regola, non invia mai la richiesta HTTP. In più sparisce il salto del redirect, quindi la pagina si apre anche un po’ più in fretta.

Come aggiungere HSTS in htaccess

Prima di tutto assicurati che ogni pagina funzioni in HTTPS, comprese immagini, script e sottodomini che usi. Poi aggiungi una riga al file .htaccess su Apache:

Header always set Strict-Transport-Security "max-age=300"

Durante i test parti con un max-age breve di 300 secondi. Se qualcosa si rompe, i browser dimenticano la regola in cinque minuti. Su Nginx la stessa riga va nel blocco server HTTPS:

add_header Strict-Transport-Security "max-age=300" always;
Demo: il controllo mostra che Strict-Transport-Security viene inviato dopo una riga aggiunta in htaccess
Dopo una riga in htaccess, l’header Strict-Transport-Security viene inviato.

Poi controlla il risultato con il nostro HTTP Header Checker gratuito. Mostra se l’header arriva e quale max-age usa.

Come alzare max-age senza rischi

HSTS si accende in fretta ma si spegne piano. Il browser tiene la regola per tutto il max-age, anche se togli l’header. Perciò alzalo a gradini:

  1. 300 secondi (cinque minuti) durante i test.
  2. 86400 secondi (un giorno) quando non si è rotto nulla.
  3. 604800 secondi (una settimana) dopo qualche giorno tranquillo.
  4. 31536000 secondi (un anno) quando tutte le pagine girano in HTTPS da un po’.

Un anno è il valore che la maggior parte delle guide consiglia per un sito online. È anche il minimo per la lista di preload.

includeSubDomains e preload

L’opzione includeSubDomains applica la regola anche a ogni sottodominio. Aggiungila solo quando tutti i sottodomini funzionano in HTTPS, anche quelli vecchi, come uno strumento interno o un pannello di posta.

L’opzione preload va ancora oltre. I browser hanno una lista integrata di siti HSTS, così anche la prima visita usa HTTPS. Tuttavia uscire da quella lista richiede mesi. Quindi invia il dominio su hstspreload.org solo quando sei sicuro.

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

HSTS su altri server e CDN

L’idea è la stessa ovunque: inviare un header su ogni risposta HTTPS. Così cambia solo il punto in cui lo scrivi.

Cloudflare

Nel pannello di Cloudflare apri SSL/TLS, poi Edge Certificates, e attiva HSTS. Scegli lì il max-age. Poiché è Cloudflare a inviare l’header, non serve anche una riga in htaccess.

WordPress

Se non puoi modificare il server, un plugin di sicurezza può aggiungere l’header. Tuttavia una regola del server è più veloce, perché agisce prima ancora che parta PHP.

IIS

Sui server Windows aggiungi un header personalizzato chiamato Strict-Transport-Security nelle intestazioni di risposta HTTP del sito. Poi controllalo con il verificatore di header.

Come provare e togliere HSTS

Per prima cosa prova dall’esterno con il nostro HTTP Header Checker. Mostra l’header esatto e il max-age che ricevono i visitatori.

In Chrome puoi anche aprire chrome://net-internals/#hsts e interrogare il tuo dominio. Mostra se il browser ha salvato la regola e quando scade. Nella stessa pagina puoi cancellare la regola per il tuo browser mentre provi.

Per togliere HSTS a tutti, invia max-age=0 per un po’ invece di cancellare l’header. Così ogni browser che passa dimentica la regola. Dopo puoi togliere la riga.

Errori comuni

  • Partire con un max-age di un anno. Se HTTPS si rompe, i visitatori restano fuori fino alla fine dell’anno.
  • Aggiungere includeSubDomains quando un sottodominio non ha ancora un certificato.
  • Inviare l’header in HTTP. I browser lo ignorano; conta solo in HTTPS.
  • Dimenticare la parola always, così le pagine di errore escono senza header.
  • Inviare il dominio alla lista di preload per prova.

In breve, HSTS è una riga, ma max-age è una promessa. Alzalo piano e controlla ogni passo con l’HTTP Header Checker. Per ogni direttiva nel dettaglio, leggi la guida MDN su Strict-Transport-Security.

Domande e risposte

Cosa fa HSTS?

Dice al browser di usare solo HTTPS per il tuo sito per un certo tempo. Dopo la prima visita, il browser non invia mai più una richiesta HTTP semplice al sito.

Con HSTS serve ancora il redirect da HTTP a HTTPS?

Sì. Il redirect copre la primissima visita, prima che il browser veda l’header. HSTS copre tutte le visite successive.

Che max-age devo usare per HSTS?

Parti con 300 secondi durante i test, poi alzalo a gradini. Per un sito online, 31536000 secondi (un anno) è il valore finale abituale.

Come tolgo HSTS?

Invia l’header con max-age=0. I browser cancellano la regola alla visita successiva in HTTPS. Fino ad allora tengono la vecchia regola.

HSTS fa bene alla SEO?

Non direttamente. Però toglie un salto di redirect a chi torna e lo protegge, e questo aiuta velocità e fiducia.

Perché il mio header HSTS non compare?

Controlla che venga inviato in HTTPS, che il modulo headers di Apache sia attivo e che una CDN o una cache non lo tolga. Il nostro HTTP Header Checker mostra cosa arriva davvero.

Cos’è il preload HSTS?

Una lista integrata nei browser, così anche la prima visita usa HTTPS. Servono max-age di un anno, includeSubDomains e preload, poi invii il dominio su hstspreload.org.

HSTS può chiudere fuori i visitatori?

Sì, se HTTPS si rompe mentre è attivo un max-age lungo. Per questo si parte corti e si alza solo quando tutto funziona.

HSTS rallenta il mio sito?

No. Toglie il redirect da HTTP a HTTPS a chi torna, quindi le pagine si aprono un po’ più in fretta.

Dove attivo HSTS su Cloudflare?

In SSL/TLS, Edge Certificates, alla voce HTTP Strict Transport Security. Così non serve aggiungerlo anche in htaccess.

Posso aggiungere HSTS con un plugin di WordPress?

Sì, molti plugin di sicurezza possono inviarlo. Tuttavia una regola in htaccess o Nginx è più veloce e copre anche i file fuori da WordPress.

Perché il mio header HSTS viene inviato due volte?

Lo aggiungono sia il server sia la CDN o un plugin. Tieni una sola fonte, così il max-age è chiaro.

Come vedo se Chrome ha salvato la mia regola HSTS?

Apri chrome://net-internals/#hsts e interroga il dominio. Lì puoi anche cancellare la regola per il tuo browser.

HSTS funziona su localhost?

I browser ignorano HSTS su localhost e sugli indirizzi IP, per questo si prova su un dominio vero.

Cosa succede se il certificato scade con HSTS attivo?

Chi conosce la regola non può ignorare l’avviso. Per questo il rinnovo automatico conta ancora di più con HSTS.

HSTS è uguale a un redirect 301?

No. Il redirect lo invia il server a ogni richiesta HTTP. Invece HSTS fa saltare del tutto la richiesta HTTP al browser.

Tutti i sottodomini devono usare HTTPS prima di includeSubDomains?

Sì. Controlla ogni sottodominio, compresi quelli vecchi e gli strumenti interni, prima di aggiungere l’opzione.

Quanto ci vuole per entrare nella lista di preload?

Di solito da qualche settimana a qualche mese, perché la lista arriva con le nuove versioni dei browser.

HSTS protegge da tutti gli attacchi?

No. Blocca il ritorno a HTTP semplice. Quindi servono altri header, come una Content-Security-Policy, per gli altri rischi.

Il SEO Checker controlla HSTS?

Sì. Il nostro SEO Checker mostra se l’header viene inviato e porta a questa guida quando manca.

Guida video

Come aggiungere HSTS senza rischi

In questo breve video vedi lo strumento dal primo all’ultimo clic. Scegli la tua lingua qui sotto e attiva i sottotitoli se ti aiutano.

Controlla ora il tuo header HSTS

Inserisci il tuo URL nell’HTTP Header Checker per vedere se viene inviato Strict-Transport-Security e con quale max-age.