X-Content-Type-Options è un header di risposta. Dice al browser di rispettare i MIME in Content-Type. nosniff è l'unico valore. Non è la CSP. Il banner cookie non lo imposta.
Il banner cookie non scrive l’header X-Content-Type-Options. X-Content-Type-Options è un header di risposta con cui il server dice al browser di rispettare i MIME dichiarati in Content-Type e di non cambiarli. MDN: si evita il MIME sniffing. Un solo valore esiste: nosniff. Non è la CSP. Non è il consenso al marketing.
In breve: header di risposta. Sintassi X-Content-Type-Options: nosniff. Due effetti: blocca script e fogli di stile se il MIME non torna; sul resto, compreso un HTML, usa il Content-Type così com’è. Un text/plain con markup HTML non diventa una pagina. Verifica del 23 settembre 2026 su MDN (ultima modifica 17 marzo 2026).
Cosa trovi in questo articolo
Cosa è nosniff (e cosa non è il banner)
MDN, sulla pagina dell’header X-Content-Type-Options, parte da un fatto: i tipi MIME pubblicati in Content-Type vanno rispettati, non riscritti. Il browser, senza questo header, può guardare i primi byte e «indovinare» il tipo. Con nosniff quella congettura si spegne. MDN aggiunge che i tester di sicurezza del sito si aspettano questo header — e che Content-Type sia impostato correttamente su tutte le risorse.
Non è la CSP. La CSP decide da dove possono arrivare script, stili, frame. nosniff decide se un file dichiarato text/plain può essere eseguito come HTML o come JavaScript. Non è CORS: CORS decide chi può leggere una risposta. Non è Permissions-Policy: quello spegne camera e geolocalizzazione. Non è il cookie SameSite. Il banner che chiede il marketing non ferma lo sniffing. Quattro header, un popup, cinque mestieri.
Questo pezzo sta nel cluster Sicurezza, accanto alla CSP e a Mixed content. La CSP limita cosa la pagina può eseguire. nosniff limita come il browser interpreta i byte. Due piani, due header.
Due effetti: blocco e sniffing spento
MDN, stessa pagina: la direttiva nosniff ha due effetti, a seconda del contesto. Specifica di riferimento: Fetch, sezione X-Content-Type-Options. Lo sniffing in sé sta nella MIME Sniffing specification.
| Contesto | Cosa fa il browser, secondo MDN |
|---|---|
destinazione script o style | blocca la risposta se il MIME non è un JavaScript MIME type (script) o text/css (fogli di stile) |
| ogni altro tipo, navigazioni HTML comprese | usa il Content-Type dichiarato, senza esaminare il contenuto per indovinare il tipo |
Esempio da MDN: risposta Content-Type: text/plain più X-Content-Type-Options: nosniff. Il browser non la tratta come HTML, anche se nel corpo c’è markup. Serve a evitare che un file caricato dall’utente, dichiarato testo, venga eseguito come documento. Il server ha detto testo, resta testo. Senza nosniff, alcuni browser storici interpretavano quel file come pagina.
Sintassi, una riga: X-Content-Type-Options: nosniff.
Non ci sono altre direttive. Non esiste sniff. Non esiste una allowlist di origini. O c’è nosniff, o l’header non c’è.
Header, Content-Type, Observatory
MDN: è un header di risposta. Non è un meta in pagina. Non è un attributo su un elemento del documento. Si mette sulla risposta HTTP, di solito sul reverse proxy o sul web server, insieme a Content-Type corretto. Un nosniff su un file JavaScript servito come text/plain non «sistema» il MIME: lo blocca. Prima si sistema Content-Type, poi si accende nosniff.
MDN rimanda a HTTP Observatory per testare la configurazione, alla definizione originale Microsoft dell’header, e a Mitigating MIME Confusion Attacks in Firefox. Si verifica sugli header della risposta, in staging, e tentando di caricare uno script con il MIME sbagliato. Non sul lucchetto della home. Non sul testo del banner. Il certificato TLS cifra il transito; non decide se un upload è HTML. Mixed content è un altro piano: HTTPS con dipendenze in HTTP. SRI è l’hash sul CDN, non il MIME.
Errori da evitare
Lasciare lo sniffing acceso e un upload utente in
text/plain: senzanosniffil browser può interpretarlo come HTML.Mettere
nosniffe servire gli script cometext/plainoapplication/octet-stream: MDN, destinazione script, la risposta viene bloccata.Trattare il banner cookie come
X-Content-Type-Options: il consenso non scrive l’header.Confondere
nosniffcon CSP, CORS o Permissions-Policy: tre header, tre mestieri, più questo.Fidarsi del plugin «security pack» senza leggere
X-Content-Type-OptionseContent-Typesulla risposta.
In sintesi
X-Content-Type-Options è un header di risposta. L’unico valore è nosniff. Blocca script e CSS col MIME sbagliato e ferma lo sniffing sul resto. Non è la CSP. Non è il banner cookie. Prima si sistema Content-Type, poi si accende l’header. MDN, 23 settembre 2026.