Security Headers HTTP

Indice dei contenuti

    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.

    Ultimo aggiornamento: