HSTS (HTTP Strict Transport Security)

Email e Sicurezza
Un'intestazione di sicurezza che forza i browser a connettersi a un sito web solo su HTTPS, prevenendo gli attacchi di downgrade.
← Torna al Glossario

Che cos'è HSTS?

HSTS (HTTP Strict Transport Security) è un meccanismo di sicurezza web che indica ai browser di comunicare con un sito solo tramite HTTPS, mai tramite HTTP. Dopo aver ricevuto un'intestazione HSTS, il browser aggiorna automaticamente a HTTPS tutte le richieste future e rifiuta le connessioni HTTP non cifrate, anche quando l'utente digita esplicitamente http://.

Perché HSTS è importante

Anche con un certificato SSL valido possono esistere vulnerabilità:

Attacco SSL stripping

1. L'utente digita "example.com" (senza https://)

2. L'attaccante intercetta la richiesta HTTP iniziale.

3. L'attaccante fa da proxy verso HTTPS, ma presenta HTTP all'utente.

4. L'utente crede di essere al sicuro, mentre l'attaccante vede tutto.

HSTS impedisce questo attacco assicurando che il browser non effettui mai quella prima richiesta HTTP.

Vantaggi di HSTS

Sintassi dell'intestazione HSTS

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Direttive

DirettivaDescrizione
max-ageSecondi per cui ricordare HSTS (31536000 = 1 anno)
includeSubDomainsApplica HSTS a tutti i sottodomini
preloadAcconsente all'inclusione nell'elenco di precaricamento del browser

Implementare HSTS

Nginx

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

Apache

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

Configurazione con Cloudflare

Abilita l'opzione in SSL/TLS → Edge Certificates → HTTP Strict Transport Security.

Express.js

const helmet = require('helmet');

app.use(helmet.hsts({

maxAge: 31536000,

includeSubDomains: true,

preload: true

}));

Elenco di precaricamento HSTS

L'elenco di precaricamento HSTS contiene domini codificati nei browser che devono essere accessibili esclusivamente tramite HTTPS. Elimina anche la vulnerabilità della prima richiesta HTTP.

Requisiti per il precaricamento

1. Certificato SSL valido.

2. Reindirizzamento di tutto il traffico HTTP a HTTPS.

3. Intestazione HSTS con:

- max-age di almeno 31536000 (1 anno).

- direttiva includeSubDomains.

- direttiva preload.

4. Tutti i sottodomini devono supportare HTTPS.

Inviare il dominio all'elenco di precaricamento

1. Verifica i requisiti: usa hstspreload.org per il controllo.

2. Invia il dominio: inserisci il dominio su hstspreload.org.

3. Attendi l'inclusione: gli aggiornamenti dei browser richiedono da settimane a mesi.

Avvertenze sul precaricamento

Il precaricamento è praticamente permanente. La rimozione dall'elenco richiede mesi e aggiornamenti dei browser. Attivalo solo se sei certo che tutti i sottodomini supporteranno HTTPS a tempo indeterminato.

Controllare HSTS

Strumenti per sviluppatori del browser:

1. Apri gli strumenti per sviluppatori → scheda Network.

2. Carica il sito.

3. Controlla l'intestazione di risposta Strict-Transport-Security.

Con curl:
curl -I https://example.com | grep -i strict
Con DomScan:
curl "https://domscan.net/v1/health?domain=example.com"

# Reports hasHSTS in security details

Stato del precaricamento:

controlla hstspreload.org per verificare se un dominio è precaricato.

Strategia di distribuzione di HSTS

Fase 1: max-age breve

Inizia con un max-age breve per eseguire i test:

Strict-Transport-Security: max-age=300

Se qualcosa si rompe, il browser conserverà la direttiva solo per 5 minuti.

Fase 2: aumenta la durata

Dopo aver verificato che HTTPS funzioni ovunque:

Strict-Transport-Security: max-age=86400

Fase 3: aggiungi i sottodomini

Quando tutti i sottodomini supportano HTTPS:

Strict-Transport-Security: max-age=2592000; includeSubDomains

Fase 4: distribuzione completa e precaricamento

Dopo mesi di funzionamento stabile:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Poi invia il dominio all'elenco di precaricamento.

Problemi comuni di HSTS

Sottodominio senza HTTPS: includeSubDomains interrompe l'accesso a quel sottodominio. Ambienti di sviluppo: HSTS memorizzato dalla produzione può interrompere lo sviluppo locale. Intestazioni CDN/proxy: assicurati che gli intermediari non rimuovano l'intestazione HSTS. Contenuti misti: tutte le risorse devono usare HTTPS; HSTS non corregge le risorse HTTP incorporate.

HSTS è essenziale per ogni sito che tratta dati sensibili ed è fortemente raccomandato per tutti i siti HTTPS.

Metti in Pratica Questa Conoscenza

Usa l'API di DomScan per verificare disponibilità, salute del dominio e altro.