Cos'è HSTS?
HSTS (HTTP Strict Transport Security) è un meccanismo di sicurezza web che dice ai browser di interagire solo con un sito web su HTTPS, mai HTTP. Una volta che un browser vede un intestazione HSTS, si aggiornerà automaticamente tutte le future richieste a HTTPS e si rifiuterà di connettersi su HTTP normale, anche se l'utente specifica esplicitamente http://.
Perché HSTS Matters
Anche con un certificato SSL valido, esistono vulnerabilità:
SSL Stripping Attack
1. Tipo di utente "example.com" (no https://)
2. Attacker intercetta la richiesta HTTP iniziale
3. Processi attaccanti a HTTPS, presenta HTTP all'utente
4. L'utente pensa di essere sicuro, ma l'aggressore vede tutto
HSTS previene questo assicurando che i browser non facciano mai quella richiesta HTTP iniziale.
Vantaggi di HSTS
- Previene attacchi di livello inferiore. Nessun errore HTTP possibile
- Protects user bookmarks: Anche i vecchi segnalibri HTTP diventano HTTPS
- Elimina il contenuto misto Subresources costretto anche a HTTPS
- Migliora le prestazioni. No HTTP→HTTPS reindirizzamenti necessari
Sintassi dell'intestazione HSTS
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Direttiva
| Direttiva | Descrizione |
|---|---|
| maxage | Secondi da ricordare HSTS (31536000 = 1 anno) |
| includereSubDomains | Applicare HSTS a tutti i sottodomini |
| precarico | Consenso all'inclusione dell'elenco precarico del browser |
Implementazione di 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"
Cloudflare
Abilita in SSL/TLS → Certificati Edge → HTTP Strict Transport Security
Express.js
const helmet = require('helmet');
app.use(helmet.hsts({
maxAge: 31536000,
includeSubDomains: true,
preload: true
}));
Elenco di precarico HSTS
L'elenco precarico HSTS è un elenco di domini codificati in browser che dovrebbero essere accessibili solo su HTTPS. Questo elimina anche la prima vulnerabilità di richiesta HTTP.
Preload Requisiti
1. Certificato SSL valido
2. Reindirizza tutto HTTP a HTTPS
3. Intestazione HSTS con:
- massimo di 31536000 (1 anno)
- include la direttiva SubDomains
- direttiva precarico
Inviare a Preload List
1. Requisiti di verifica Utilizzare hstspreload.org per controllare
2. Dominio pubblico: Inserisci dominio su hstspreload.org
3. Aspetta per l'inclusione. Ci vogliono settimane a mesi per gli aggiornamenti del browser
Avvertenze di precarico
Il carico è permanente (praticamente). La rimozione dalla lista richiede mesi e richiede aggiornamenti del browser. Solo precaricare se siete certi che tutti i sottodomini supportano HTTPS indefinitamente.Controllo HSTS
Ricercatore DevTools:1. Apri DevTools → scheda di rete
2. Caricare il sito
3. Controllare intestazioni di risposta per Strict-Transport-Security
# Usando il riccio #
curl -I https://example.com | grep -i strict
# Usando DomScan #
curl "https://domscan.net/v1/health?domain=example.com"
# Reports hasHSTS in security details
Stato di caricamento
Controllare hstspreload.org per vedere se un dominio è precaricato.
Strategia di distribuzione HSTS
Fase 1: Maxaggio corto
Iniziare con una breve max-age per testare:
Strict-Transport-Security: max-age=300Se qualcosa si rompe, gli utenti memorizzano solo 5 minuti.
Fase 2: Aumenta la durata
Dopo aver confermato HTTPS funziona ovunque:
Strict-Transport-Security: max-age=86400
Fase 3: Aggiungere subdomini
Una volta che tutti i sottodomini supportano HTTPS:
Strict-Transport-Security: max-age=2592000; includeSubDomains
Fase 4: Full Deployment + Preload
Dopo mesi di funzionamento stabile:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadPoi si sottopone alla lista di precarico.
Problemi HSTS comuni
Subdomain senza HTTPS: includeSubDomains breaks that subdomain Gli ambienti di sviluppo: HSTS cached from production breaks local dev CDN/Proxy headers: Assicurarsi che l'intestazione HSTS non sia spogliata da intermediari Contenuto misto Tutte le risorse devono essere HTTPS; HSTS non risolve le risorse HTTP incorporateHSTS è essenziale per qualsiasi sito web che gestisce dati sensibili e fortemente raccomandato per tutti i siti HTTPS.