← Tutti i controlli
SicurezzaGravità tipica: Basso

Scanner dell'HSTS debole

Rileva un'intestazione HSTS con max-age troppo basso o senza includeSubDomains che lascia falle per il downgrade.

Cosa controlla

Questo scanner esamina il tuo header HSTS e rileva quando ha un max-age troppo basso o gli manca l'attributo includeSubDomains. Così individua configurazioni HSTS che lasciano varchi sfruttabili.

Perché è importante

L'HSTS obbliga i browser a usare sempre HTTPS con il tuo sito, ma se la sua durata è molto breve o non copre i sottodomini, restano finestre in cui un attaccante può forzare una connessione non cifrata. Quel varco rende possibili attacchi di downgrade che intercettano il traffico.

Come risolverlo

Imposta l'header HSTS con un max-age lungo (di solito un anno, cioè 31536000 secondi) e aggiungi includeSubDomains per coprire tutto il dominio. Di solito si fa nella configurazione del server o del CDN, ed è saggio testarlo prima con un valore più basso se non sei sicuro.

Come funziona questo controllo

Questo controllo agisce solo se il tuo sito invia già l'header Strict-Transport-Security; se manca del tutto, lo segnala lo scanner degli header. Scanaris legge il valore e verifica due cose: che max-age sia almeno un anno (31536000 secondi) e che includa includeSubDomains. Se manca una delle due, apre un rilievo di gravità bassa con il dettaglio. Bassa, perché un HSTS corto o parziale protegge ancora qualcosa; ma lascia buchi che un attaccante può sfruttare.

Cosa fa HSTS e perché entrambi gli attributi

Quando il browser riceve questo header in HTTPS, annota il tuo dominio in una lista interna e, per il tempo indicato da max-age, trasforma qualsiasi tentativo di andare su http:// in https:// prima di inviare qualsiasi cosa. Questo elimina la prima richiesta non cifrata che un reindirizzamento non può evitare. Un max-age di qualche ora o giorno lascia l'utente senza protezione a ogni scadenza; da qui il minimo di un anno. Senza includeSubDomains, un attaccante può puntare a qualsiasicosa.tuodominio.it in HTTP e, per come funzionano i cookie di dominio, rubare o fissare cookie validi per il sito principale.

Come risolvere

Il valore consigliato:

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • Vercel: lo imposta di default sui domini personalizzati; se usi vercel.json o next.config per altri header, aggiungilo lì con questo valore.
  • Netlify: nel file _headers, sotto /*.
  • Nuxt: in routeRules di nuxt.config, regola '/**'.
  • nginx: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; nel blocco server della 443.
  • Express: helmet.hsts({ maxAge: 31536000, includeSubDomains: true }).

Prima di aggiungere includeSubDomains, conferma che tutti i tuoi sottodomini servano HTTPS: il pannello di amministrazione, l'API, il blog presso un altro fornitore, il sottodominio della posta se ha un sito. Qualsiasi sottodominio che risponde solo in HTTP smetterà di funzionare nei browser che hanno già visto l'header, e non c'è modo di tornare indietro finché max-age non scade. Nel dubbio, inizia con max-age=86400 e senza sottodomini, verifica, e alza il valore quando tutto funziona.

Preload

Con preload e un max-age di almeno un anno, puoi richiedere l'inclusione del tuo dominio nella lista incorporata in Chrome, Firefox e Safari: così nemmeno la prima visita passa per HTTP. È la differenza abituale tra una A e una A+ negli strumenti di analisi. Ma è un impegno quasi irreversibile (uscire dalla lista richiede mesi), quindi fallo solo quando tutto il dominio è in HTTPS da un po' senza incidenti.

Verifica che sia risolto

curl -sI https://tuodominio.it | grep -i strict-transport

Deve mostrare un max-age di 31536000 o più e includeSubDomains. Verifica sull'URL pubblico: se hai una CDN davanti, è lei che deve inviarlo.

Domande frequenti

HSTS sostituisce il reindirizzamento da HTTP a HTTPS?

No. L'header arriva solo in HTTPS, quindi la prima visita ha ancora bisogno del reindirizzamento. Sono complementari: il reindirizzamento per la prima volta, HSTS per tutte le altre.

Ho un sottodominio interno che va solo in HTTP.

Allora non mettere includeSubDomains prima di averlo migrato, e accetta il rilievo di gravità bassa nel frattempo. Un sottodominio non cifrato è un rischio reale per i cookie del dominio, quindi la migrazione vale la pena.

Cosa succede se lo configuro male?

I browser che hanno ricevuto l'header manterranno la politica fino alla sua scadenza. Puoi inviare max-age=0 per chiedere loro di dimenticarla, ma lo vedranno solo quelli che tornano in HTTPS. Per questo è meglio iniziare con valori brevi.

Verificalo sul tuo sito

Scansiona il tuo sito gratis e scopri se questo e altri 44 controlli passano, con un prompt di fix per ogni problema.

Scansiona il mio sito gratis

Dal blog

Controlli correlati