Defaults.Exposed › Rettelser › MIME-sniffing-beskyttelse (X-Content-Type-Options)
Sådan retter du MIME-sniffing-beskyttelse (X-Content-Type-Options)
Et ét-linjes header der stopper browsere i at gætte, hvad en fil egentlig er. Uden det kan en fil nogen uploader til din side — eller en fil på dine egne sider — fejlfortolkes af browseren og køres som kode, hvilket er præcis, hvordan nogle angreb forvandler en harmløs-udseende upload til en måde at stjæle dine kunders sessioner.
Det korte svar for din virksomhed: At mangle dette header er et tydeligt, skannerbart tegn på, at grundlæggende sikkerhed ikke er på plads. I sig selv tager det sjældent en side ned, men kombineret med en fil-upload-formular eller brugergenereret indhold åbner det en vej for en angriber til at køre ondsindet kode i dine besøgendes browsere — kapre indloggede sessioner, stjæle kort- eller loginoplysninger og sætte dig på den forkerte side af en databrudsamtale. Det er en af de billigste rettelser inden for sikkerhed: én linje, gratis, cirka fem minutter.
Hvad dette kan koste dig
- Enhver side, hvor kunder eller medarbejdere kan uploade filer (avatarer, dokumenter, supportvedhæftninger, listefotos), bliver et muligt affyringssted for browser-side-angreb.
- En angriber kan forklæde ondsindet kode som et billede eller tekstfil og få besøgendes browser til at køre det — og stjæle deres indloggede session på din side.
- Sikkerhedsspørgeskemaer, cyber-forsikringstjek og enterprise-købere scanner for dette header; dets fravær læses som 'de gør ikke det grundlæggende' og kan stalle eller sætte en aftale i stå.
- Ældre browsere og nogle integrationer 'sniffe' indholdstyper og kan misbehandle filer på måder der bryder tillid eller lækker data.
Hvorfor det betyder noget. Browsere, når en server er uklar om, hvad en fil er, vil forsøge at gætte ('sniffe') indholdstypen. Angribere udnytter det gæt: upload en fil serveren ærligt tror er et billede, men craft dens indhold, så browseren beslutter, at det faktisk er JavaScript — og kører det. X-Content-Type-Options: nosniff-headeret siger til enhver browser om at holde op med at gætte og stole på serverens erklærede type, og lukker den hele klasse af tricks. Det er et scoret tjek værd 25 point og rated medium alvorlighed, når det mangler.
Den korte version til ejeren
Der er en stille antagelse bygget ind i enhver webbrowser: når den downloader en fil fra din side, prøver den at finde ud af, hvilken slags fil det er. Som regel stoler den på din server. Men er din server uklar, vil browseren gætte — og det gætten hedder MIME-sniffing.
Problemet er, at angribere kan spille på gættet. De kan udforme en fil, som din server ærligt tror er et harmløst billede, men som browseren, overladt til sig selv, beslutter faktisk er et stykke programkode — og derefter kører det, direkte inde i din kundes browser, på dit domæne.
Der er en ét-linjes instruktion der slår gætteriet fra: X-Content-Type-Options: nosniff. Det siger til enhver browser, “gæt ikke — stol præcis på hvad min server siger.” Det er hele fikset. Det er gratis, det tager cirka fem minutter, og på en korrekt opbygget side bryder det ingenting.
Dette tjek kigger efter det header. Mangler det, mister du 25 point og det er rated et medium-alvorligheds-problem.
Hvad dette kan koste dig
-
Den “harmløse vedhæftning” der ikke var det. Du kører en supportportal eller en markedsplads, hvor kunder uploader filer. En angriber uploader en fil dit system lagrer og serverer som et billede. Uden nosniff gætter et offers browser, at filen faktisk er script og kører det — og stjæler stille den besøgendes indloggede session på din side.
-
Aftalen der staller på et sikkerhedsspørgeskema. En større kundes indkøbsteam kører en automatiseret scanning af din side inden underskrift. Manglende sikkerhedsheaders dukker straks op.
-
Cyber-forsikringsfornyelsen der bliver sværere. Flere forsikringsselskaber kører nu eksterne scanninger inden tilbud eller fornyelse.
-
Omdømmeskaden du ikke let kan fortryde. Sporer en session-hijacking-hændelse tilbage til en fil serveret fra dit domæne, er historien ikke “et obskurt header manglede” — det er “[din virksomhed] lækkede kundekonti.”
Hvad det faktisk er
Når en browser modtager en fil, er serveren meningen at mærke den med en indholdstype (for eksempel image/png for et PNG-billede). Historisk set stolede browsere ikke fuldt på den etiket — delvist fordi nogle servere tog fejl — så de kiggede på filens faktiske bytes og besluttede selv. Det kig er MIME-sniffing.
Det var en bekvemmelighed der blev en forpligtelse. Kan en angriber få en fil ind på din side og påvirke dens indhold, kan de udforme noget serveren mærker uskyldigt, men browseren snifier som eksekverbart script. Browseren kører det derefter på dit domæne, med al den tillid dit domæne bærer.
X-Content-Type-Options: nosniff fjerner gætteriet helt. Med det sat, siges til browseren: brug serverens erklærede type og intet andet. En fil mærket som et billede behandles som et billede, færdigt — selv om dens indhold ligner script.
Hvad “godt” ser ud som: enhver respons fra din side — sider og ressourcer i øvrigt — bærer præcis dette header:
X-Content-Type-Options: nosniff
Sådan fikser du det (gratis, ~5 minutter)
Overrækk dette afsnit til den der kører din hjemmeside — din IT-person, din webudvikler eller din hostingsupport. Fikset er gratis og hurtigt; der er intet at købe.
Cloudflare (eller lignende CDN/proxy) — ofte det hurtigste sted at gøre det, og det dækker hele sitet på én gang:
- Brug en Response Header Transform Rule til at sætte
X-Content-Type-Optionstilnosnifffor alle indgående requests.
Nginx — tilføj inde i den relevante server (eller location)-blok:
add_header X-Content-Type-Options "nosniff" always;
Apache — kræver mod_headers aktiveret; i site-konfigurationen eller .htaccess:
Header always set X-Content-Type-Options "nosniff"
IIS / Windows hosting — i web.config under <system.webServer>:
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
Node / Express — sæt det for enhver respons:
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
next();
});
(Eller brug helmet-pakken, der sætter dette og adskillige andre sikkerhedsheaders som standard.)
Efter udrulning, verificér det. Kør din scanning igen, eller bed din udvikler om at tjekke svar-headers i browser-devtools (Network-fane → klik en request → Svar-headers) og bekræft at X-Content-Type-Options: nosniff er til stede.
Almindelige fejl
- At sætte det kun på forsiden. Headeret skal være på enhver respons — inklusive billeder, scripts, stilarter og uploadede filer.
- En slåfejl i værdien. Den eneste gyldige værdi er
nosniff. Noget andet (en blank værdi, en stavefejl) fejler tjekket. - At antage, at det erstatter en Content Security Policy. nosniff er ét lag. Det kontrollerer ikke hvilke scripts der har tilladelse til at køre — det er CSP’s job.
- At fjerne “det dublerede”. Ser du det to gange, er det harmløst — brug ikke tid på at fjerne den ene.
Send dette til din IT-person
Det tekniske resumé: dette tjek inspicerer HTTP-svar-headers og består, når X-Content-Type-Options er til stede og dens (case-insensitive) værdi indeholder nosniff — inklusive multi-kilde nosniff, nosniff-tilfeldet. Manglende eller enhver ikke-nosniff-værdi fejler. Det er et scoret P2-tjek værd 25 point, rated medium alvorlighed ved fejl, og kortlægger OWASP Top 10 A05 (Security Misconfiguration). Remedieringen er et enkelt statisk svar-header anvendt på tværs af alle responser; der er ingen parametre og ingen gyldige alternative værdier.
FAQ
Vi lader ingen uploade filer. Har vi stadig brug for dette?
Ja, og det er stadig værd at gøre. Headeret er dybde-i-forsvar: det stopper også browseren i at fejllæse scripts, stilarter og datafiler serveret fra din egen side, hvilket beskytter mod adskillige cross-site-scripting-tricks, selv på sider uden uploadformular. Det koster ingenting og bryder aldrig en korrekt konfigureret side, så der er ingen grund til at springe det over.
Vil det at tilføje dette bryde noget på vores hjemmeside?
Næsten aldrig. nosniff sørger simpelthen for, at browsere overholder den indholdstype, din server allerede sender. Den eneste måde det giver problemer på, er hvis din server mislabeller filer — for eksempel at sende et stylesheet eller script med den forkerte type. Bryder noget, er det en reel fejl nosniff afslørede snarere end forårsagede, og det er værd at fikse alligevel. Test én gang efter udrulning.
Hvad ser 'godt' faktisk ud som?
Et enkelt svar-header på enhver side og ressource: X-Content-Type-Options: nosniff. Det er hele den korrekte konfiguration — der er ingen andre gyldige værdier og intet at tuning.
Vores CDN (Cloudflare eller lignende) og vores server tilføjer det begge — er det et problem?
Nej. At se værdien to gange ('nosniff, nosniff'), fordi både CDN'et og kilden sætter det, er helt fint og tæller stadig som bestå. Du behøver ikke fjerne den ene.
Koster det at fikse dette penge?
Nej. Fikset er én linje gratis konfiguration på din webserver eller CDN. Den eneste ting der er værd at betale for på dette område, er løbende overvågning, en porteføljevisning på tværs af mange sider eller en formel revision — ikke selve fikset.
Hvordan er dette anderledes end en Content Security Policy (CSP)?
De er komplementære. CSP kontrollerer hvilke scripts og ressourcer der overhovedet har tilladelse til at indlæse; nosniff stopper browseren i at fejlklassificere en fil den indlæser. Du ønsker begge. nosniff er langt enklere og hurtigere at tilføje, så det er et godt første skridt på vej til en fuld CSP.