Defaults.Exposed › Åtgärder › MIME-sniffningsskydd (X-Content-Type-Options)
Hur du fixar MIME-sniffningsskydd (X-Content-Type-Options)
Ett engångshuvud som förhindrar webbläsare från att gissa vad en fil egentligen är. Utan det kan en fil som någon laddar upp till din webbplats — eller en fil på dina egna sidor — feltolkas av webbläsaren och köras som kod, vilket är exakt hur vissa attacker förvandlar en till synes harmlös uppladdning till ett sätt att stjäla dina kunders sessioner.
Slutsats för ditt företag: Att sakna det här huvudet är ett tydligt, skanningsbart tecken på att grunderna inte är låsta. Ensamt tar det sällan ned en webbplats, men kombinerat med ett filuppladdningsformulär eller användargenerererat innehåll öppnar det en väg för en angripare att köra skadlig kod i dina besökares webbläsare — kapar inloggade sessioner, stjäl kort- eller inloggningsuppgifter, och ställer dig på fel sida av ett dataintrångssamtal. Det är en av de billigaste åtgärderna inom säkerhet: en rad, gratis, ungefär fem minuter.
Vad detta kan kosta dig
- Alla sidor där kunder eller personal kan ladda upp filer (avatarer, dokument, supportbilagor, annonsfoton) blir ett möjligt startrampe för webbläsarbaserade attacker.
- En angripare kan förklädda skadlig kod som en bild- eller textfil och få besökarens webbläsare att köra den — stjäla deras inloggade session på din webbplats.
- Säkerhetsformulär, cyberförsäkringskontroller och företagskunder skannar efter det här huvudet; dess frånvaro läses som 'de gör inte grunderna' och kan stoppa eller sänka en affär.
- Äldre webbläsare och vissa integrationer 'sniffar' innehållstyper och kan felhantera filer på sätt som bryter förtroende eller läcker data.
Varför det spelar roll. Webbläsare, när en server är vag om vad en fil är, försöker gissa ('sniffa') innehållstypen. Angripare utnyttjar den gissningen: ladda upp en fil som servern märker som en bild, men utforma dess innehåll så att webbläsaren bestämmer att det faktiskt är JavaScript — och kör det. Huvudet X-Content-Type-Options: nosniff berättar för varje webbläsare att sluta gissa och lita på serverns angivna typ, vilket stänger hela den klassen av tricks. Det är en betygsatt kontroll värd 25 poäng och betygsätts med medelhög allvarlighetsgrad när det saknas.
Kortversionen för ägaren
Det finns ett tyst antagande inbyggt i varje webbläsare: när den laddar ned en fil från din webbplats försöker den lista ut vilken typ av fil det är. Vanligtvis litar den på din server. Men om din server är vag gissar webbläsaren — och den gissningen kallas MIME-sniffning.
Problemet är att angripare kan manipulera gissningen. De kan skapa en fil som din server ärligt tror är en harmlös bild, men som webbläsaren, lämnad att gissa, bestämmer faktiskt är ett stycke programkod — och sedan kör den, direkt i din kunds webbläsare, på din domän.
Det finns en engångsinstruktion som stänger av gissandet: X-Content-Type-Options: nosniff. Det berättar för varje webbläsare, “gissa inte — lita exakt på vad min server berättar för dig.” Det är hela åtgärden. Den är gratis, tar ungefär fem minuter, och på en korrekt byggd webbplats bryter den ingenting.
Den här kontrollen letar efter det huvudet. Om det saknas förlorar du 25 poäng och det betygsätts som ett medelsvårt problem — inte för att huvudet ensamt är en katastrof, utan för att dess frånvaro är ett pålitligt tecken på att grunderna inte har låsts ned.
Vad det här kan kosta dig
Det här är realistiska, affärsnivåscenarios — inte worst-case-teater.
-
Den “ofarliga bilagan” som inte var det. Du driver en supportportal eller ett marknadsplatss där kunder laddar upp filer — kvitton, foton, dokument. En angripare laddar upp en fil som ditt system lagrar och serverar som en bild. Utan nosniff gissar ett offers webbläsare att filen faktiskt är ett skript och kör det — stjäl tyst den besökarens inloggade session på din webbplats. Nu är angriparen dem: lägger beställningar, läser meddelanden, ändrar uppgifter. Du får reda på det när kunder börjar klaga på aktivitet de inte gjort.
-
Affären som stannar på ett säkerhetsformulär. En större kunds inköpsteam kör en automatiserad skanning av din webbplats innan de skriver på. Saknade säkerhetshuvuden dyker upp omedelbart. Även om ingenting någonsin exploaterades, säger rapporten “grundläggande webbsäkerhetshuvuden saknas,” och plötsligt svarar du på saneringsfrågorna och skjuter ut ditt stängningsdatum med veckor — för en åtgärd som hade tagit fem minuter.
-
Cyberförsäkringsförnyelsen som blir svårare. Fler försäkringsgivare kör nu externa skanningar innan de kvoterar eller förnyar. En ren huvudprofil är ett billigt bevis på hygien; en saknad en är en liten svart prick som, staplad med andra, knuffar din premie upp eller dina villkor ned.
-
Ryktespåverkan du inte lätt kan ångra. Om en sessionshijack-incident spåras tillbaka till en fil servad från din domän, är berättelsen inte “ett obskyrt huvud saknades” — det är “[ditt företag] läckte kundkonton.” Det är den version kunderna minns, och det kostar mycket mer än åtgärden någonsin skulle ha gjort.
Inget av dessa kräver en sofistikerad angripare. MIME-sniffningsmissbruk är välförstått och automatiserat, vilket är exakt varför skanners flaggar det saknade huvudet så bestämt.
Vad det faktiskt är
När en webbläsare tar emot en fil är servern tänkt att märka den med en innehållstyp (till exempel, image/png för en PNG-bild eller text/html för en webbsida). Historiskt litat inte webbläsare fullt på den etiketten — delvis för att vissa servrar fick det fel — så de kikade på filens faktiska bytes och bestämde själva. Det kikandet är MIME-sniffning.
Det var en bekvämlighet som blev ett ansvar. Om en angripare kan få en fil på din webbplats (via ett uppladdningsformulär, ett kommentarsfält, ett importerat dokument) och påverka dess innehåll, kan de skapa något som servern märker oskyldigt men webbläsaren sniffar som körbar kod. Webbläsaren kör den sedan på din domän, med allt förtroende din domän bär.
X-Content-Type-Options: nosniff tar bort gissningsarbetet helt. Med det satt instrueras webbläsaren: använd serverns deklarerade typ och inget annat. En fil märkt som en bild behandlas som en bild, punkt — även om dess innehåll ser ut som ett skript. Attackvektorn stängs.
Vad “bra” ser ut som: varje svar från din webbplats — sidor och tillgångar lika — bär exakt det här huvudet:
X-Content-Type-Options: nosniff
Det finns inget annat giltigt värde och ingenting att ställa in. Om din CDN och din server båda lägger till det (så du ser nosniff, nosniff) är det bra och räknas fortfarande som godkänt.
Så här åtgärdar du det (gratis, ~5 minuter)
Skicka det här avsnittet till den som driver din webbplats — din IT-person, din webbutvecklare eller din hostingsupport. Åtgärden är gratis och snabb; det finns ingenting att köpa. Vad du ber om är enkelt: “Lägg till svarshuvudet X-Content-Type-Options: nosniff på varje sida och tillgång på webbplatsen.”
Här är detaljerna för dem, per vanlig plattform.
Cloudflare (eller liknande CDN/proxy) — ofta det snabbaste stället att göra det, som täcker hela webbplatsen på en gång:
- Använd en Response Header Transform Rule (Regler → Omvandlingsregler → Ändra svarshuvud) för att sätta
X-Content-Type-Optionstillnosniffför alla inkommande begäran. Det tillämpar det webbplatsövergripande utan att röra ursprungsservern.
Nginx — lägg till inuti relevanta server (eller location) block:
add_header X-Content-Type-Options "nosniff" always;
Nyckelordet always säkerställer att det skickas på felsvar också. Ladda om Nginx efter sparande.
Apache — kräver att mod_headers är aktiverat; i webbplatskonfigurationen 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ätt det för varje svar:
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
next();
});
(Eller använd helmet-paketet, som sätter det här och flera andra säkerhetshuvuden som standard.)
Google Workspace / Microsoft 365-webbplatser: dessa hanterar din e-post och dina dokument, inte din offentliga webbplatshosting, så huvudet sätts inte där — det sätts var din webbplats faktiskt serveras (din CDN, webbserver eller webbplatsbyggare). Om du använder en hostad webbplatsbyggare (Squarespace, Wix, Shopify och liknande) lägger många till det här huvudet åt dig automatiskt; kontrollera resultatet snarare än att anta, och fråga deras support om det saknas.
Efter driftsättning, verifiera det. Kör om din skanning, eller låt din utvecklare kontrollera svarshuvudena i webbläsarutvecklarverktyg (Nätverksflik → klicka på valfri begäran → Svarshuvuden) och bekräfta att X-Content-Type-Options: nosniff är på plats. Testa webbplatsen kortfattat för att bekräfta att ingenting styl- eller skriptmässigt gick sönder — på en korrekt byggd webbplats kommer ingenting att göra det.
Vanliga misstag
- Sätta det bara på hemsidan. Huvudet måste finnas på varje svar — inklusive bilder, skript, stilmallar och uppladdade filer — för att det är de resurser som sniffning påverkar. Tillämpa det på server- eller CDN-nivå så att det är universellt, inte sida-för-sida.
- En stavfel i värdet. Det enda giltiga värdet är
nosniff. Allt annat (ett tomt värde, en felstavning) underkänner kontrollen och ger inget skydd. Skannern rapporterar det värde den faktiskt såg så att du kan se en stavfel. - Anta att det ersätter en Content Security Policy. nosniff är ett lager. Det kontrollerar inte vilka skript som tillåts köra — det är CSP:s jobb. Lägg till nosniff nu som en snabb vinst, och behandla en ordentlig CSP som den större uppföljningen.
- Ta bort “duplikaten.” Om både din CDN och ursprunget sätter det, ser du det två gånger. Det är ofarligt — lägg inte ner tid på att ta bort ett av dem.
- Betala för det. Det är en fri konfigurationsändring. Övervakning, revisioner och portföljdashboards är legitimt betalda; att lägga till ett enda huvud är det inte.
Skicka det här till din IT-person
Den tekniska sammanfattningen: den här kontrollen inspekterar HTTP-svarshuvudena och godkänner när X-Content-Type-Options är på plats och dess (skiftlägesokänsliga) värde innehåller nosniff — inklusive multi-källfallet nosniff, nosniff där en CDN och ursprunget båda sätter det. Saknat eller valfritt icke-nosniff-värde underkänns. Det är en betygsad P2-kontroll värd 25 poäng, betygsatt med medelhög allvarlighetsgrad när den underkänns, och kartläggs till OWASP Top 10 A05 (Security Misconfiguration). Sanering är ett enda statiskt svarshuvud tillämpat på alla svar; det finns inga parametrar och inga giltiga alternativa värden. Sätt det på kanten (CDN) för webbplatsövergripande täckning, eller på webbservern med always-semantik så att det emitteras på felsvar också, bekräfta sedan i svarshuvudena.
Vanliga frågor
Vi låter ingen ladda upp filer. Behöver vi fortfarande det här?
Ja, och det är fortfarande värt att göra. Huvudet är djupförsvar: det stoppar också webbläsaren från att feltolka skript, stilmallar och datafiler som serveras från din egna webbplats, vilket skyddar mot flera cross-site-scripting-tricks även på webbplatser utan uppladdningsformulär. Det kostar ingenting och bryter aldrig en korrekt konfigurerad webbplats, så det finns ingen anledning att hoppa över det.
Bryter det något på vår webbplats om vi lägger till det?
Nästan aldrig. nosniff gör helt enkelt webbläsare till att respektera den innehållstyp som din server redan skickar. Det enda sättet det orsakar problem är om din server felmärker filer — till exempel skickar en stilmall eller ett skript med fel typ. Om något går sönder är det ett riktigt fel nosniff avslöjat snarare än orsakat, och det är värt att åtgärda ändå. Testa en gång efter driftsättning.
Vad ser 'bra' faktiskt ut som?
Ett enda svarshuvud på varje sida och tillgång: X-Content-Type-Options: nosniff. Det är hela den korrekta konfigurationen — det finns inga andra giltiga värden och ingen inställning att göra.
Vår CDN (Cloudflare eller liknande) och vår server lägger båda till det — är det ett problem?
Nej. Att se värdet två gånger ('nosniff, nosniff') för att både CDN:en och ursprunget sätter det är helt bra och klarar sig fortfarande. Du behöver inte ta bort ett av dem.
Kostar det pengar att åtgärda det?
Nej. Åtgärden är en rad fri konfiguration på din webbserver eller CDN. Den som tar betalt av dig för att lägga till ett enda huvud tar för mycket betalt. Det enda som är värt att betala för i det här området är löpande övervakning, en portföljvy över många webbplatser, eller en formell revision — inte åtgärden i sig.
Hur skiljer det sig från en Content Security Policy (CSP)?
De är kompletterande. CSP kontrollerar vilka skript och resurser som överhuvudtaget får laddas; nosniff förhindrar webbläsaren från att felklassificera en fil den faktiskt laddar. Du vill ha båda. nosniff är mycket enklare och snabbare att lägga till, så det är ett bra första steg på vägen till en fullständig CSP.