Defaults.Exposed › Ispravci › Zaštita od MIME-sniffinga (X-Content-Type-Options)
Kako popraviti Zaštita od MIME-sniffinga (X-Content-Type-Options)
Jednolinirajsko zaglavlje koje sprječava preglednikeda nagađaju što je zapravo neka datoteka. Bez njega, datoteka koju netko prenese na vašu stranicu — ili datoteka na vašim vlastitim stranicama — može biti pogrešno pročitana od strane preglednika i pokrenuta kao kod, što je upravo kako neki napadi pretvaraju bezopasno-izgledajući upload u način krađe sesija vaših klijenata.
Zaključak za vaše poslovanje: Nedostajanje ovog zaglavlja jasni je, skenljivi znak da osnove nisu na mjestu. Samo po sebi rijetko sruši stranicu, ali u kombinaciji s obrascem za prijenos datoteka ili korisničkim sadržajem otvara put za napadača da pokrene zlonamjerni kod u preglednicima vaših posjetitelja — otimajući prijavljene sesije, kradeći podatke unosa kartice ili prijave i stavljajući vas na pogrešnu stranu razgovora o kršenju podataka. To je jedan od najjeftinijih popravaka u sigurnosti: jedan redak, besplatno, oko pet minuta.
Što vas ovo može koštati
- Svaka stranica gdje klijenti ili osoblje mogu prenositi datoteke (avatare, dokumente, privitke podrške, fotografije popisa) postaje moguće lansirno mjesto za napade na strani preglednika.
- Napadač može prikriti zlonamjerni kod kao sliku ili tekstualnu datoteku i natjerati preglednik posjetitelja da ga pokrene — kradeći njihovu prijavljenu sesiju na vašoj stranici.
- Sigurnosni upitnici, provjere cyber-osiguranja i kontrolne liste kupaca iz poduzeća skeniraju za ovo zaglavlje; njegova odsutnost čita se kao 'ne rade osnove' i može zaustaviti ili poništiti posao.
- Stariji preglednici i neke integracije 'njiušaju' tipove sadržaja i mogu pogrešno rukovati datotekama na načine koji narušavaju povjerenje ili curenje podataka.
Zašto je to važno. Preglednici, kad server nije precizan o tome što je neka datoteka, pokušat će pogoditi ('njušiti') tip sadržaja. Napadači iskorištavaju tu pogodbu: prenesite datoteku koju server označi kao sliku, ali oblikujte njene sadržaje tako da preglednik odluči da je zapravo JavaScript — i pokrene ga. Zaglavlje X-Content-Type-Options: nosniff govori svakom pregleniku da prestane pogađati i vjeruje serveru navedenom tipu, zatvarajući cijelu klasu trikova. To je bodovana provjera vrijedna 25 bodova i ocijenjeno srednje ozbiljnosti kad nedostaje.
Kratka verzija za vlasnika
Postoji tiha pretpostavka ugrađena u svaki web preglednik: kad preuzme datoteku s vaše stranice, pokušava otkriti kakva je vrsta datoteke. Obično vjeruje vašem serveru. Ali ako je server nejasan, preglednik će pogoditi — a to pogađanje se zove MIME-sniffing.
Problem je taj da napadači mogu igrati s pogadbom. Mogu izraditi datoteku kojoj vaš server iskreno vjeruje da je bezopasna slika, ali preglednik, prepušten pogađanju, zaključi da je zapravo dio programskog koda — i tada ga pokrene, unutar preglednika vašeg klijenta, na vašoj domeni.
Postoji jednolinirajska uputa koja isključuje pogađanje: X-Content-Type-Options: nosniff. Govori svakom pregleniku, “ne pogađaj — vjeruj točno onome što moj server ti kaže.” To je cijeli popravak. Besplatan je, traje oko pet minuta i na ispravno izgrađenoj stranici ništa ne pokvari.
Ova provjera traži to zaglavlje. Ako nedostaje, gubite 25 bodova i to je ocijenjeno kao problem srednje ozbiljnosti — ne jer je samo zaglavlje katastrofa, već jer je njegova odsutnost pouzdan znak da osnove nisu bile zaključane.
Što vas ovo može koštati
Ovo su realni, poslovni scenariji — ne kazalište najgoreg slučaja.
-
“Bezopasni privitak” koji nije bio. Pokrećete portal za podršku ili tržnicu gdje klijenti prenose datoteke — potvrde, fotografije, dokumente. Napadač prenese datoteku koju vaš sustav pohrani i posluži kao sliku. Bez nosniffa, preglednik žrtve pogodi da je datoteka zapravo skripta i pokrene je — tiho kradeći prijavljenu sesiju tog posjetitelja na vašoj stranici. Sada je napadač oni: naručuje, čita poruke, mijenja detalje. Saznate kad klijenti počnu prijavljivati aktivnost koju nisu napravili.
-
Posao koji stane na sigurnosnom upitniku. Nabavni tim većeg klijenta pokrene automatizirano skeniranje vaše stranice prije potpisa. Nedostajuća sigurnosna zaglavlja odmah se pojave. Čak i ako ništa nikad nije bilo iskorišteno, izvješće kaže “nedostaju osnovna zaglavlja web sigurnosti,” i iznenada odgovarate na pitanja o sanaciji i gurate datum zaključivanja za tjednima — zbog popravka koji bi bio trajao pet minuta.
-
Obnova cyber-osiguranja koja postaje teža. Sve više osiguravatelja sada provodi vanjska skeniranja prije davanja ponuda ili obnove. Čist profil zaglavlja jeftan je dokaz higijene; nedostajući je mala crna oznaka koja, nagomilana s drugima, povisi vašu premiju ili pogorša uvjete.
-
Reputacijski udarac koji lako ne poništavate. Ako se incident otimanja sesije prati natrag na datoteku posluživanu s vaše domene, priča nije “nedostajalo je obscurno zaglavlje” — to je “[vaše poduzeće] curilo korisničke račune.” To je verzija koju klijenti pamte, i košta daleko više nego što bi ikad bio popravak.
Ništa od ovoga ne zahtijeva sofisticiranog napadača. Zloupotreba MIME-sniffinga je dobro razumljena i automatizirana, što je točno razlog zašto skeneri tako čvrsto označavaju nedostajuće zaglavlje.
Što je to zapravo
Kad preglednik prime datoteku, server je trebao označiti s tipom sadržaja (na primjer, image/png za PNG sliku ili text/html za web stranicu). Povijesno, preglednici nisu u potpunosti vjerovati toj oznaci — djelomično jer su je neki serveri pogrešno naveli — pa bi zavirivali u stvarne bajte datoteke i sami odlučili. To zaviravanje je MIME-sniffing.
Bila je to pogodnost koja je postala odgovornost. Ako napadač može na vašu stranicu dobiti datoteku (putem obrasca za upload, polja za komentare, uvezenog dokumenta) i utjecati na njene sadržaje, mogu izraditi nešto što server nevinjaški označi, ali preglednik njuška kao izvršivu skriptu. Preglednik tada to pokreće na vašoj domeni, sa svim povjerenjem koje vaša domena nosi.
X-Content-Type-Options: nosniff u potpunosti uklanja pogađanje. S njim postavljenim, pregleniku se govori: koristite deklarirani tip servera i ništa drugo. Datoteka označena kao slika tretira se kao slika, točka — čak i ako njeni sadržaji izgledaju kao skripta. Vektor napada zatvara se.
Kako izgleda ‘dobro’: svaki odgovor s vaše stranice — stranice i resursi — nosi točno ovo zaglavlje:
X-Content-Type-Options: nosniff
Nema druge valjane vrijednosti i nema ugađanja. Ako vaš CDN i vaš server oba to dodaju (pa vidite nosniff, nosniff), to je u redu i još uvijek se računa kao prolaz.
Kako to popraviti (besplatno, ~5 minuta)
Proslijedite ovaj odjeljak onome tko vodi vašu web stranicu — vašoj IT osobi, vašem web programeru ili podršci hostinga. Popravak je besplatan i brz; nema ničega za kupiti. Što tražite je jednostavno: “Dodajte zaglavlje odgovora X-Content-Type-Options: nosniff na svaku stranicu i resurs na stranici.”
Evo detalja za njih, po uobičajenoj platformi.
Cloudflare (ili sličan CDN/proxy) — često najbrže mjesto za to, pokrivajući cijelu stranicu odjednom:
- Koristite Response Header Transform Rule (Rules → Transform Rules → Modify Response Header) za postavljanje
X-Content-Type-Optionsnanosniffza sve dolazne zahtjeve. Ovo ga primjenjuje na cijelu stranicu bez doticanja servera podrijetla.
Nginx — dodajte unutar relevantnog server (ili location) bloka:
add_header X-Content-Type-Options "nosniff" always;
Ključna riječ always osigurava da se šalje i na greške odgovora. Ponovo učitajte Nginx nakon pohrane.
Apache — zahtijeva omogućen mod_headers; u konfiguraciji stranice 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 paket helmet, koji po zadanom postavlja ovo i nekoliko drugih sigurnosnih zaglavlja.)
Google Workspace / Microsoft 365 stranice: ovi upravljaju vašom e-poštom i dokumentima, ne hostingom vaše javne web stranice, pa se zaglavlje tamo ne postavlja — postavlja se gdje god je vaša web stranica zapravo servirana (vaš CDN, web server ili graditelj stranica). Ako koristite hosteani graditelj stranica (Squarespace, Wix, Shopify i slični), mnogi automatski dodaju ovo zaglavlje; provjerite rezultat umjesto pretpostavljanja i pitajte njihovu podršku ako nedostaje.
Nakon postavljanja, verificirajte ga. Ponovo pokrenite skeniranje, ili neka vaš programer provjeri zaglavlja odgovora u preglednikovim alatima za razvijatelje (kartica Network → kliknite bilo koji zahtjev → Response Headers) i potvrdi da je X-Content-Type-Options: nosniff prisutan. Ukratko testirajte stranicu da potvrdite da se ništa stilski ili skriptovano nije pokvarilo — na ispravno izgrađenoj stranici neće se ništa.
Česte greške
- Postavljanje samo na početnoj stranici. Zaglavlje mora biti na svakom odgovoru — uključujući slike, skripte, stilove i prenesene datoteke — jer ti resursi su ono na što sniffing utječe. Primijenite na razini servera ili CDN-a da bude univerzalno, ne po stranicama.
- Greška u kucanju u vrijednosti. Jedina valjana vrijednost je
nosniff. Bilo što drugo (prazna vrijednost, pogrešno pisanje) ne prolazi provjeru i ne pruža zaštitu. Skener će prijaviti vrijednost koju je stvarno vidio da možete uočiti grešku. - Pretpostavljanje da zamjenjuje Content Security Policy. nosniff je jedan sloj. Ne kontrolira koje skripte smiju uopće pokrenuti — to je posao CSP-a. Dodajte nosniff sada kao brzu pobjedu i tretirajte pravi CSP kao veći nastavak.
- Uklanjanje “duplikata”. Ako ga i vaš CDN i podrijetlo postave, vidjet ćete ga dva puta. To je bezopasno — ne trošite vrijeme na uklanjanje jednog.
- Plaćanje za to. To je besplatna konfiguracijska promjena. Nadgledanje, revizije i portfelj nadzorne ploče su legitimno plaćeni; dodavanje jednog zaglavlja nije.
Predajte ovo vašoj IT osobi
Tehnički sažetak: ova provjera pregledava HTTP zaglavlja odgovora i prolazi kad je X-Content-Type-Options prisutan i njegova (neosjetljiva na velika-mala slova) vrijednost sadrži nosniff — uključujući višeizvorni nosniff, nosniff slučaj gdje CDN i podrijetlo oba to postave. Nedostajuće ili bilo koje ne-nosniff vrijednosti ne prolaze. To je bodovana P2 provjera vrijedna 25 bodova, ocijenjeno srednje ozbiljnosti kad ne prolazi, i mapira na OWASP Top 10 A05 (Sigurnosna Pogrešna Konfiguracija). Sanacija je jedno statičko zaglavlje odgovora primijenjeno na svim odgovorima; nema parametara i nema valjanih alternativnih vrijednosti. Postavite na rubu (CDN) za pokrivenost cijele stranice, ili na web serveru s always semantikom da se emitira i na greška odgovorima, zatim potvrdite u zaglavljima odgovora.
Česta pitanja
Ne dopuštamo nikome prenošenje datoteka. Trebamo li ovo i dalje?
Da, i svejedno ga vrijedi napraviti. Zaglavlje je obrana u dubini: također sprječava preglednik da pogrešno pročita skripte, stilove i podatkovne datoteke posluživane s vaše vlastite stranice, što štiti od nekoliko XSS trikova čak i na stranicama bez obrasca za upload. Ne košta ništa i nikad ne pokvari ispravno konfiguriranu stranicu, pa nema razloga preskočiti ga.
Hoće li dodavanje ovoga pokvariti bilo što na našoj web stranici?
Gotovo nikad. nosniff jednostavno čini preglenike da poštuju tip sadržaja koji vaš server već šalje. Jedini način da uzrokuje probleme je ako vaš server pogrešno označi datoteke — primjerice šalje stilski list ili skriptu s pogrešnim tipom. Ako se nešto pokvari, to je prava greška koju je nosniff otkrio, a ne uzrokovao, i svejedno je vrijedi popraviti. Jednom testirajte nakon postavljanja.
Kako zapravo izgleda 'dobro'?
Jedno zaglavlje odgovora na svakoj stranici i resursu: X-Content-Type-Options: nosniff. To je cijela ispravna konfiguracija — nema drugih valjanih vrijednosti i nema ugađanja za napraviti.
Naš CDN (Cloudflare ili slični) i naš server oboje ga dodaju — je li to problem?
Ne. Vidjeti vrijednost dvaput ('nosniff, nosniff') jer su i CDN i podrijetlo ga postavili je potpuno u redu i još uvijek prolazi. Ne trebate uklanjati jedno.
Košta li popravak novca?
Ne. Popravak je jedan redak besplatne konfiguracije na vašem web serveru ili CDN-u. Tko god vam naplaćuje dodavanje jednog zaglavlja, prenaplaćuje. Jedine stvari koje vrijedi platiti u ovom području su kontinuirano nadgledanje, pogled na portfelj na višoj razini ili formalna revizija — ne sam popravak.
Kako se ovo razlikuje od Content Security Policy (CSP)?
Komplementarni su. CSP kontrolira koje skripte i resursi smiju uopće učitati; nosniff sprječava preglednik da pogrešno klasificira datoteku koja se učitava. Trebate oboje. nosniff je daleko jednostavniji i brži za dodati, pa je dobra prva točka na putu prema punom CSP-u.