← TORNA ALLE GUIDE / Siti web

Header di sicurezza HTTP spiegati: HSTS, CSP e altri

Cosa fanno HSTS, CSP, X-Frame-Options, Referrer-Policy e Permissions-Policy, quali valori usare e perché un header da verificare non è sempre un punto debole.

Di IPNixaPubblicato il

Controlla gli header di sicurezza di un sito

Che cosa sono gli header di sicurezza

Ogni risposta HTTP inizia con gli header: coppie nome-valore come Content-Type: text/html. Alcuni di essi cambiano il modo in cui il browser tratta la pagina. Inviarli non costa nulla, valgono per ogni visitatore e si impostano sul server, sulla piattaforma di hosting o su una rete di distribuzione dei contenuti (CDN), non nell’HTML della pagina.

IPNixa imposta i propri header in un file _headers che Cloudflare invia con ogni pagina. Lo strumento di questo sito richiede dal nostro server l’indirizzo che inserisci, segue fino a tre reindirizzamenti e legge gli header della risposta finale.

I sei header più importanti

Questi sono gli header valutati dallo strumento. I valori indicati sono punti di partenza comuni e sicuri; adattali alle esigenze del tuo sito.

Header, cosa impedisce e valore tipico
HeaderCosa impedisceValore tipico
Strict-Transport-Security (HSTS)Il declassamento delle connessioni a HTTP non cifrato dopo la prima visitamax-age=31536000; includeSubDomains
Content-Security-Policy (CSP)L’esecuzione di script iniettati, limitando il cross-site scriptingdefault-src 'self'; script-src 'self'; frame-ancestors 'none'
X-Frame-Options o CSP frame-ancestorsIl caricamento della pagina da parte di altri siti in un frame nascosto (clickjacking)DENY, oppure frame-ancestors 'none'
X-Content-Type-OptionsIl browser che indovina il tipo di file ed esegue dati come scriptnosniff
Referrer-PolicyLa trasmissione ad altri siti degli indirizzi completi delle pagine, inclusi percorsi e parametri di querystrict-origin-when-cross-origin
Permissions-PolicyL’uso di videocamera, microfono o posizione da parte della pagina o dei frame incorporaticamera=(), microphone=(), geolocation=()

Come lo strumento di IPNixa valuta ogni header

Ogni header riceve uno di tre stati: presente, da verificare o non fornito. «Da verificare» significa che l’header esiste ma il suo valore non rispetta la regola indicata sotto: è un invito a guardare meglio, non un punteggio di sicurezza.

Cosa inviano i siti reali: un campione

Il 2 novembre 2026 abbiamo richiesto cinque home page con lo stesso user agent usato dallo strumento e abbiamo valutato le risposte con le regole di IPNixa. Gli header cambiano spesso, quindi consideralo un’istantanea.

Valutazioni di cinque home page, 2 novembre 2026
SitoHSTSCSPFramenosniffReferrerPermessi
github.compresenteda verificarepresentepresentepresentenon fornito
ipnixa.compresenteda verificarepresentepresentepresentepresente
www.wikipedia.orgpresentenon fornitonon fornitonon fornitonon fornitonon fornito
www.google.comnon fornitoreport-onlypresentenon fornitonon fornitonon fornito
example.comnon fornitonon fornitonon fornitonon fornitonon fornitonon fornito

Leggere il campione: da verificare non vuol dire debole

La policy di GitHub limita gli script al proprio host di risorse e a hash specifici, ed è quindi rigorosa. Viene segnalata come da verificare solo perché il suo style-src consente 'unsafe-inline', e la regola cerca quella parola chiave in qualsiasi punto della policy. Gli stili inline comportano un rischio molto minore degli script inline: si tratta quindi di un compromesso deliberato più che di una falla.

Il nostro sito è segnalato come da verificare per un motivo diverso: la sua policy contiene solo frame-ancestors 'none', che blocca l’incorporamento in frame ma non limita gli script. Riportiamo il risultato così com’è.

La home page di Google invia la sua policy sugli script come Content-Security-Policy-Report-Only, che segnala le violazioni senza bloccarle, e in questa risposta non inviava HSTS; i grandi siti possono imporre HTTPS con altri mezzi, come gli elenchi di precaricamento dei browser. Il portale di Wikipedia invia un max-age HSTS molto lungo e poco altro su quella pagina. Niente di tutto ciò indica se questi siti siano sicuri nel complesso; mostra quali protezioni del browser richiede ciascuna risposta.

Aggiungere gli header al tuo sito

Aggiungi un header alla volta, ricarica il sito e verifica che pagine, accessi, video incorporati e moduli di pagamento funzionino ancora prima di aggiungere il successivo.

  1. Inizia dagli header a basso rischio: X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin e X-Frame-Options: DENY, a meno che le tue pagine non debbano essere incorporate in un frame da un altro sito.
  2. Aggiungi HSTS con un max-age breve, per esempio 300, verifica che ogni sottodominio funzioni in HTTPS, poi portalo a 31536000. Aggiungi includeSubDomains solo quando tutti i sottodomini supportano HTTPS.
  3. Scrivi una Content-Security-Policy e inviala prima come Content-Security-Policy-Report-Only. Raccogli le segnalazioni di violazione o osserva la console del browser, correggi o autorizza le sorgenti legittime, poi passa all’header che applica la policy.
  4. Aggiungi Permissions-Policy elencando le funzionalità sensibili che non usi, per esempio camera=(), microphone=(), geolocation=().
  5. Su nginx usa add_header con il flag always, su Apache usa Header always set, e su hosting statico o CDN usa il file degli header della piattaforma o le regole per gli header di risposta.
  6. Esegui di nuovo il controllo degli header di IPNixa. Per ogni header mancante mostra una riga pronta da copiare per nginx, Apache o un file _headers.

Precaricamento HSTS e altre cautele

Gli elenchi di precaricamento HSTS (preload) sono integrati nei browser, quindi anche la primissima visita usa HTTPS. Per inviare un dominio servono un max-age di almeno un anno, includeSubDomains e la direttiva preload, e la rimozione richiede mesi prima di arrivare agli utenti. Invia il dominio solo se tutti i sottodomini, compresi quelli interni, resteranno su HTTPS.

X-XSS-Protection è obsoleto: i browser moderni lo ignorano e una CSP lo sostituisce. Gli header di isolamento cross-origin (Cross-Origin-Opener-Policy, Cross-Origin-Embedder-Policy e Cross-Origin-Resource-Policy) non vengono valutati dallo strumento, perché servono solo ai siti che usano funzionalità come la memoria condivisa, e attivarli può bloccare i contenuti incorporati di terze parti.

Domande frequenti

Se manca un header, visitare il sito non è sicuro?

No. Gli header aggiungono una protezione lato browser contro attacchi specifici. Un sito che non li usa può comunque essere gestito bene, e un sito che li usa tutti può avere altre falle. Usa il risultato come lista di controllo per il gestore del sito, non come giudizio per chi lo visita.

Perché il mio browser mostra header che lo strumento non ha visto?

I siti possono variare gli header in base alla pagina, al paese, allo stato di accesso o alla posizione della CDN. Lo strumento legge una sola risposta per l’indirizzo inserito, ottenuta dalla rete di Cloudflare senza cookie.

Meglio X-Frame-Options o frame-ancestors?

frame-ancestors nella CSP è il controllo moderno e può autorizzare siti specifici. Inviare anche X-Frame-Options mantiene la protezione sui browser meno recenti; quando sono presenti entrambi, i browser attuali seguono frame-ancestors.

Posso controllare una pagina che richiede il login?

No. Lo strumento non invia cookie né credenziali e rifiuta gli indirizzi privati e locali. Per le pagine protette da login o su una rete privata, copia gli header di risposta non elaborati dagli strumenti per sviluppatori del browser o da curl -I e incollali nello strumento: gli header incollati vengono analizzati nel tuo browser.

Fonti e approfondimenti