Gli security headers HTTP sono intestazioni di risposta che il server invia al browser per istruirlo ad applicare policy di sicurezza specifiche durante il rendering della pagina e la gestione delle risorse. Operano sul lato client: non prevengono le vulnerabilità nel codice server, ma limitano l’impatto di vulnerabilità come XSS, clickjacking e downgrade HTTP, ponendo barriere nel browser prima che il codice malevolo possa agire. Sono misure di difesa in profondità — non sostituiscono la correzione delle vulnerabilità, ma ne riducono significativamente l’impatto.
Content Security Policy (CSP)
L’header più potente e più complesso. CSP definisce una whitelist di sorgenti da cui il browser può caricare ciascuna tipologia di risorsa: script, stili, immagini, font, frame, connessioni di rete. Qualsiasi risorsa non nella whitelist viene bloccata dal browser prima di essere caricata o eseguita.
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cdn.esempio.it;
style-src 'self' 'nonce-abc123';
img-src 'self' data:;
connect-src 'self' https://api.esempio.it;
frame-ancestors 'none';
upgrade-insecure-requests;
Mitigazione XSS: una CSP che vieta gli script inline (script-src senza 'unsafe-inline') e limita le sorgenti esterne elimina la maggior parte dei vettori XSS anche in presenza della vulnerabilità — lo script iniettato non può essere eseguito se la sorgente non è nella whitelist.
Nonce-based CSP: invece di 'unsafe-inline', ogni tag <script> legittimo riceve un attributo nonce generato casualmente per ogni richiesta. Solo gli script con il nonce corretto vengono eseguiti — gli script iniettati dall’attaccante non conoscono il nonce.
Report-only mode: Content-Security-Policy-Report-Only invia violazioni a un endpoint senza bloccarle. Usato per testare una CSP prima di attivarla in modo restrittivo.
X-Frame-Options
Controlla se la pagina può essere inclusa in un <frame>, <iframe> o <object>. Previene gli attacchi di clickjacking: l’attaccante sovrappone la pagina vittima (invisibile o semitrasparente) sopra una pagina ingannevole, inducendo l’utente a cliccare elementi della pagina vittima credendo di cliccare su quella visibile.
X-Frame-Options: DENY # mai in frame
X-Frame-Options: SAMEORIGIN # solo frame della stessa origine
Sostituito dalla direttiva frame-ancestors di CSP, ma X-Frame-Options mantiene supporto in browser più vecchi.
X-Content-Type-Options
X-Content-Type-Options: nosniff
Impedisce al browser di eseguire il MIME sniffing: dedurre il tipo di contenuto dal suo contenuto invece che dall’header Content-Type. Senza questo header, un browser potrebbe interpretare un file di testo caricato come immagine come JavaScript se il contenuto sembra codice — un vettore per XSS tramite upload di file. Con nosniff, il browser rispetta rigorosamente il Content-Type dichiarato.
Strict-Transport-Security
Vedi voce dedicata HSTS.
Referrer-Policy
Controlla quante informazioni sull’URL della pagina corrente vengono incluse nell’header Referer nelle richieste verso altre origini. Protegge la privacy degli utenti e impedisce la fuga di URL che contengono token o dati sensibili nei parametri.
Referrer-Policy: strict-origin-when-cross-origin
Le policy vanno da no-referrer (nessun riferimento inviato) a unsafe-url (URL completo sempre inviato).
Permissions-Policy
Controlla l’accesso del browser a funzionalità hardware e API: fotocamera, microfono, geolocalizzazione, accelerometro, autoplay, full screen. Permette di disabilitare funzionalità non necessarie per l’applicazione, riducendo la superficie di attacco in caso di XSS.
Permissions-Policy: camera=(), microphone=(), geolocation=(self)
Valutazione della configurazione
Il sito securityheaders.com analizza gli header di qualsiasi URL e produce un report con voto (A+ a F) e raccomandazioni specifiche. È lo strumento di riferimento per il quick assessment della configurazione degli header di sicurezza.