Defaults.Exposed

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

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.

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:

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

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.