Cosa sono gli header HTTP
Gli header HTTP sono le righe di intestazione che client e server si scambiano prima del contenuto di una pagina, nella forma Nome: valore. La loro semantica è definita dalla RFC 9110. Anche il browser ne invia a ogni richiesta: lo user agent, per esempio, comunica al sito quale browser e quale sistema operativo usi. Nella risposta il server indica il codice di stato (200, 301, 404…), il tipo di contenuto, le regole di cache, i cookie e le istruzioni di sicurezza che il browser deve applicare.
Alcuni header rivelano informazioni utili per il debug: Server indica il software del web server, Cache-Control e Age se la pagina arriva da una cache, Location la destinazione di un redirect. Altri, gli header di sicurezza, chiedono al browser di attivare protezioni che da solo non applicherebbe.
Come controllare gli header HTTP di un sito
- Inserisci l’URL completo, per esempio
https://www.example.com/. - Avvia l’analisi: lo strumento richiede la pagina e registra la risposta del server.
- Leggi il codice di stato e l’elenco completo degli header.
- Controlla la tabella degli header di sicurezza: quelli mancanti vanno aggiunti nella configurazione del web server o del CMS.
Header di sicurezza: cosa fanno e valori consigliati
| Header | Cosa fa | Valore di partenza |
|---|---|---|
| Strict-Transport-Security (HSTS) | Obbliga il browser a usare sempre HTTPS per il dominio, per il tempo indicato (RFC 6797) | max-age=31536000; includeSubDomains |
| Content-Security-Policy | Elenca le origini da cui la pagina può caricare script, stili, immagini e frame. È la difesa principale contro il cross-site scripting | default-src 'self', da adattare al sito |
| X-Frame-Options | Impedisce che la pagina sia inserita in un frame di un altro sito (clickjacking). La direttiva CSP frame-ancestors lo sostituisce | SAMEORIGIN |
| X-Content-Type-Options | Vieta al browser di “indovinare” il tipo di un file diverso da quello dichiarato | nosniff |
| Referrer-Policy | Decide quanta parte dell’URL di provenienza viene inviata ai siti esterni | strict-origin-when-cross-origin |
| Permissions-Policy | Disattiva le funzioni del browser che il sito non usa, come fotocamera, microfono e geolocalizzazione | camera=(), microphone=(), geolocation=() |
L’header X-XSS-Protection è superato: i browser moderni lo ignorano e non serve aggiungerlo.
Errori comuni nella configurazione degli header
- HSTS attivato con il sito non pronto: con
includeSubDomainstutti i sottodomini devono avere un certificato valido, altrimenti diventano irraggiungibili per la durata delmax-age. Parti con un valore basso, per esempio 300 secondi, e alzalo quando hai verificato che tutti i sottodomini rispondono in HTTPS. - Content-Security-Policy troppo restrittiva: blocca script di statistiche, mappe o font esterni e rompe parti del sito. Provala prima con
Content-Security-Policy-Report-Only, che segnala le violazioni senza bloccare nulla. - Header duplicati: lo stesso header impostato sia dal CMS sia dal web server, con valori diversi. Il browser può applicare il più restrittivo o ignorarli entrambi.
- Header presenti solo su alcune pagine: un redirect o una pagina di errore senza HSTS indebolisce la protezione. Controlla anche gli URL secondari.
Gli header di sicurezza funzionano solo con HTTPS configurato bene: controlla anche il certificato SSL del sito. Per misurare quanto impiega il server a rispondere usa il test del tempo di risposta.
Domande frequenti
Come vedo gli header HTTP di un sito?
Questo strumento mostra tutti gli header della risposta e valuta quelli di sicurezza. Dal browser puoi aprire gli strumenti per sviluppatori con F12, scheda Rete, e selezionare la richiesta. Da riga di comando funziona curl -I https://www.example.com/, che mostra solo gli header.
Come si aggiunge l’header HSTS?
Su Apache si aggiunge nel file .htaccess o nella configurazione del sito con Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains", su Nginx con la direttiva add_header. L’header va inviato solo sulle risposte HTTPS. Per entrare nella lista di precaricamento dei browser servono anche la direttiva preload e la richiesta su hstspreload.org.
X-Frame-Options o Content-Security-Policy frame-ancestors?
La direttiva frame-ancestors della Content-Security-Policy è lo standard attuale e permette di indicare con precisione quali siti possono incorporare la pagina in un frame. X-Frame-Options resta utile per i browser più vecchi. Puoi impostarli entrambi: dove ci sono tutti e due, i browser moderni danno la precedenza a frame-ancestors.
Mancano gli header di sicurezza: il sito è a rischio?
Senza header di sicurezza il sito non è violato, però perde protezioni utili contro attacchi come il clickjacking, il cross-site scripting o il declassamento da HTTPS a HTTP. Su un sito con aree riservate, moduli o pagamenti vanno aggiunti. Gli header più semplici da introdurre sono X-Content-Type-Options e Referrer-Policy.
Fonti e riferimenti
Pagina aggiornata il