Defaults.Exposed

Defaults.ExposedRešenja › MIME-sniffing zaštita (X-Content-Type-Options)

Kako popraviti MIME-sniffing zaštita (X-Content-Type-Options)

Jednolinijski header koji sprečava pretraživače da pogađaju šta je fajl zapravo. Bez njega, fajl koji neko okači na vaš sajt — ili fajl na vašim stranicama — pretraživač može pogrešno pročitati i pokrenuti ga kao kod, što je tačno način na koji neki napadi pretvaraju naizgled bezazleni upload u alat za krađu sesija vaših kupaca.

Suština za vaše poslovanje: Nedostatakak ovog headera je jasno, skenabilno upozorenje da osnove nisu zaključane. Sam po sebi rijetko ruši sajt, ali u kombinaciji s formom za upload fajlova ili sadržajem generisanim od korisnika otvara put napadaču da izvršava zloćudni kod u pretraživačima vaših posjetioca — hijackujući ulogovane sesije, kradući kartična i login detalje i stavljajući vas na pogrešnoj strani razgovora o proboju podataka. To je jedna od najjeftinijih popravki u bezbednosti: jedna linija, besplatno, oko pet minuta.

Šta vam ovo može koštati

Zašto je to važno. Pretraživači, kad je server nejasan o tome šta je fajl, pokušavaju pogoditi ("njušiti") tip sadržaja. Napadači iskorišćavaju tu pretpostavku: okače fajl koji server označava kao sliku, ali sadrži sadržaj koji pretraživač odlučuje da je zapravo JavaScript — i pokrene ga. X-Content-Type-Options: nosniff header govori svakom pretraživaču da prestane pogađati i vjeruje deklariranom tipu servera, zatvarajući cijelu tu klasu trikova. To je bodovana provjera vrijedna 25 bodova i ocjenjena je kao srednja ozbiljnost kad nedostaje.

Kratka verzija za vlasnika

Postoji tiha pretpostavka ugrađena u svaki web pretraživač: kad preuzima fajl s vašeg sajta, pokušava shvatiti kakav je fajl. Obično vjeruje vašem serveru. Ali ako je vaš server nejasan, pretraživač će pogađati — a to pogađanje naziva se MIME-sniffing.

Problem je što napadači mogu igrati na tu pretpostavku. Mogu kreirati fajl koji vaš server iskreno vjeruje da je bezazlena slika, ali koji pretraživač, prepušten pogađanju, odlučuje da je zapravo dio programskog koda — i zatim ga pokrene, direktno u pretraživaču vašeg kupca, na vašem domenu.

Postoji jednolinijska instrukcija koja isključuje pogađanje: X-Content-Type-Options: nosniff. Govori svakom pretraživaču, “ne pogađaj — vjeruj tačno onome što ti moj server govori.” To je cijela popravka. Besplatna je, traje oko pet minuta, i na ispravno izgrađenom sajtu ništa ne kvari.

Ova provjera traži taj header. Ako nedostaje, gubite 25 bodova i ocjenjena je kao problem srednje ozbiljnosti — ne zato što header sam po sebi katastrofa, već jer njegovo odsustvo je pouzdani znak da osnove nisu zaključane.

Šta vam ovo može koštati

Ovo su realistični poslovni scenariji — ne pozorišna dramatizacija najgoreg slučaja.

Nijedno od ovih ne zahtijeva sofisticiranog napadača. Zloupotrebi MIME-sniffinga dobro je razumljeno i automatizovano, što je tačno razlog zašto skeneri toliko čvrsto flaguju nedostajući header.

Šta je to zapravo

Kad pretraživač primi fajl, server ga treba označiti tipom sadržaja (na primjer, image/png za PNG sliku ili text/html za web stranicu). Istorijski, pretraživači nisu u potpunosti vjerovali toj oznaci — dijelom jer su neki serveri griješili — pa bi zavirili u stvarne bajtove fajla i sami odlučili. To zavirenje je MIME-sniffing.

Bila je to pogodnost koja je postala obaveza. Ako napadač može nabaviti fajl na vašem sajtu (putem forme za upload, polja za komentare, uvezenog dokumenta) i utjecati na njegov sadržaj, mogu kreirati nešto što server označava bezazleno, ali pretraživač njuška kao izvršivu skriptu. Pretraživač ga zatim pokrene na vašem domenu, s povjerenjem koje vaš domen nosi.

X-Content-Type-Options: nosniff u potpunosti uklanja nagađanje. S njim postavljenim, pretraživaču se govori: koristi deklariranu vrstu servera i ništa više. Fajl označen kao slika tretira se kao slika, tačka — čak i ako mu sadržaj izgleda kao skripta. Napadački vektor se zatvara.

Kako izgleda “dobro”: svaki odgovor s vašeg sajta — stranice i asseti podjednako — nosi tačno ovaj header:

X-Content-Type-Options: nosniff

Nema druge valjane vrijednosti i nema podešavanja. Ako ga vaš CDN i vaš server oba dodaju (pa vidite nosniff, nosniff), to je u redu i i dalje se računa kao prolaz.

Kako popraviti (besplatno, ~5 minuta)

Prosledite ovaj odeljak ko god pokreće vaš sajt — vašoj IT osobi, web developeru ili podršci hostinga. Popravka je besplatna i brza; nema ničeg za kupiti. Ono za šta pitate je jednostavno: “Dodajte response header X-Content-Type-Options: nosniff na svaku stranicu i asset na sajtu.”

Evo detalja za njih, po uobičajenoj platformi.

Cloudflare (ili sličan CDN/proxy) — često najbrže mjesto za to, pokrivajući cijeli sajt odjednom:

Nginx — dodajte unutar odgovarajućeg server (ili location) bloka:

add_header X-Content-Type-Options "nosniff" always;

Ključna reč always osigurava da se šalje i u odgovorima na greške. Reload Nginx-a nakon snimanja.

Apache — zahtijeva mod_headers omogućen; u config sajta ili .htaccess:

Header always set X-Content-Type-Options "nosniff"

IIS / Windows hosting — u web.config pod <system.webServer>:

<httpProtocol>
  <customHeaders>
    <add name="X-Content-Type-Options" value="nosniff" />
  </customHeaders>
</httpProtocol>

Node / Express — postavite za svaki odgovor:

app.use((req, res, next) => {
  res.setHeader('X-Content-Type-Options', 'nosniff');
  next();
});

(Ili koristite helmet paket, koji ovo i nekoliko других bezbednosnih headera postavlja po defaultu.)

Google Workspace / Microsoft 365 sajtovi: ovi upravljaju vašim imejlom i dokumentima, ne vašim javnim web hostingom, pa se header ne postavlja tamo — postavlja se gdje god se vaš sajt zapravo servira (vaš CDN, web server ili graditelj sajtova). Ako koristite hosted graditelja sajtova (Squarespace, Wix, Shopify i slično), mnogi automatski dodaju ovaj header; provjerite rezultat umjesto pretpostavljanja i pitajte njihovu podršku ako nedostaje.

Nakon deploy-a, verifikujte ga. Ponovo pokrenite skeniranje, ili neka vaš developer provjeri response headere u browser developer toolsima (Network tab → kliknite bilo koji zahtjev → Response Headers) i potvrdi prisustvo X-Content-Type-Options: nosniff. Ukratko testirajte sajt da potvrdite da se ništa od stila ili skripti nije pokvarilo — na ispravno izgrađenom sajtu ništa se neće.

Česte greške

Prosledite ovo vašoj IT osobi

Tehnički sažetak: ova provjera ispituje HTTP response headere i prolazi kad je X-Content-Type-Options prisutan i njegova (case-insensitive) vrijednost sadrži nosniff — uključujući multi-source slučaj nosniff, nosniff gdje CDN i origin oba postavljaju. Nedostajući ili bilo koji non-nosniff vrijednost pada. To je bodovana P2 provjera vrijedna 25 bodova, ocjenjena srednje ozbiljnosti kad pada, i mapira se na OWASP Top 10 A05 (Security Misconfiguration). Sanacija je jedan statički response header primijenjen na sve odgovore; nema parametara i nema valjanih alternativnih vrijednosti. Postavite ga na edge-u (CDN) za pokrivenost cijelog sajta, ili na web serveru s always semantikom da se emituje i na greško-odgovorima, zatim potvrdite u response headerima.

Često postavljana pitanja

Ne dozvoljavamo nikome okačivanje fajlova. Trebamo li i dalje ovo?

Da, i i dalje vrijedi uraditi. Header je obrana u dubini: također sprečava pretraživač od pogrešnog čitanja skripti, stilova i podatkovnih fajlova s vašeg sopstvenog sajta, što štiti od nekoliko cross-site-scripting trikova čak i na sajtovima bez forme za upload. Ničeg ne košta i nikad ne kvari ispravno konfigurisan sajt, pa nema razloga preskočiti.

Hoće li dodavanje ovoga pokvariti nešto na našem sajtu?

Skoro nikad. nosniff jednostavno čini pretraživače poštovanjem tipa sadržaja koji vaš server već šalje. Jedini način da uzrokuje problem je ako vaš server pogrešno označava fajlove — na primjer šalje stylesheet ili skriptu s pogrešnim tipom. Ako nešto pukne, to je prava greška koju je nosniff izložio, a ne uzrokovao, i vrijedi je popraviti ionako. Jednom testirajte nakon implementacije.

Kako zapravo izgleda 'dobro'?

Jedan response header na svakoj stranici i asetu: X-Content-Type-Options: nosniff. To je cijela ispravna konfiguracija — nema drugih valjanih vrijednosti i nema podešavanja.

Naš CDN (Cloudflare ili slično) i naš server ga oba dodaju — je li to problem?

Ne. Viđanje vrijednosti dva puta ('nosniff, nosniff') jer ga i CDN i origin postavljaju potpuno je u redu i i dalje prolazi. Ne trebate ukloniti jedan.

Košta li popravka novca?

Ne. Popravka je jedna linija besplatne konfiguracije na vašem web serveru ili CDN-u. Svako ko vam naplaćuje dodavanje jednog headera preplaćuje. Jedine stvari vrijedne plaćanja u ovoj oblasti su tekuće praćenje, portafoliogledan prikaz više sajtova ili formalna revizija — ne sama popravka.

Kako se ovo razlikuje od Content Security Policy (CSP)?

Komplementarni su. CSP kontroliše koje skripte i resursi se uopšte mogu učitati; nosniff sprečava pretraživač od pogrešnog klasifikovanja fajla koji jeste učita. Trebate oboje. nosniff je daleko jednostavniji i brži za dodavanje, pa je dobar prvi korak na putu ka punom CSP-u.