Defaults.Exposed › Taisymai › Apsauga nuo MIME tipo spėjimo (X-Content-Type-Options)
Kaip ištaisyti Apsauga nuo MIME tipo spėjimo (X-Content-Type-Options)
Vienos eilutės antraštė, kuri sustabdo naršykles nuo spėjimo, kas iš tikrųjų yra failas. Be jos, failas, kurį kas nors įkelia į jūsų svetainę – ar failas jūsų pačių puslapiuose – gali būti klaidingai interpretuojamas naršyklės ir vykdomas kaip kodas, o tai yra tiksliai tai, kaip kai kurios atakos paverčia nekaltai atrodantį įkėlimą į būdą pavogti jūsų klientų sesijas.
Praktinė reikšmė jūsų verslui: Trūkstama ši antraštė yra aiškus, nuskaitomas ženklas, kad pagrindai nėra savo vietoje. Pati savaime ji retai nuverčia svetainę, bet kartu su failų įkėlimo forma ar vartotojų generuotu turiniu ji atveria kelią užpuolikui vykdyti kenksmingą kodą jūsų lankytojų naršyklėse – pagrobiant prisijungusias sesijas, vagiant kortelių įvedimo ar prisijungimo detales, ir statant jus netinkamoje duomenų pažeidimo pokalbio pusėje. Tai yra vienas pigiausių pataisymų saugumo srityje: viena eilutė, nemokama, apie penkias minutes.
Ką tai gali kainuoti
- Bet kuris puslapis, kur klientai ar darbuotojai gali įkelti failus (avatarai, dokumentai, palaikymo priedai, sąrašo nuotraukos), tampa galimų naršyklės pusės atakų paleidimo vieta.
- Užpuolikas gali savo kenksmingą kodą užmaskuoti kaip paveikslėlį ar teksto failą ir turėti lankytojo naršyklę jį vykdant – vagiant jų prisijungusią sesiją jūsų svetainėje.
- Saugumo klausimynai, kibernetinio draudimo tikrinimai ir įmonės pirkėjai nuskaito šią antraštę; jos nebuvimas skaitomas kaip 'jie nedaro pagrindų' ir gali sustabdyti ar sužlugdyti sandorį.
- Senesnės naršyklės ir kai kurios integracijos 'uosto' turinio tipus ir gali klaidingai tvarkyti failus būdais, kurie griauna pasitikėjimą ar nuteka duomenis.
Kodėl tai svarbu. Naršyklės, kai serveris yra miglotas apie tai, kas yra failas, bandys spėti ('uostyti') turinio tipą. Užpuolikai išnaudoja tą spėjimą: įkelia failą, kurį serveris pažymi kaip paveikslėlį, bet kurio turinys yra sudarytas taip, kad naršyklė nusprendžia, kad jis iš tikrųjų yra JavaScript – ir jį vykdo. `X-Content-Type-Options: nosniff` antraštė liepia kiekvienai naršyklei nustoti spėti ir pasitikėti serverio nurodytu tipu, uždarant visą tą klasę triukų. Tai yra vertinamas tikrinimas, vertas 25 taškų, ir vertinamas kaip vidutinio rimtumo, kai jo nėra.
Trumpa versija savininkui
Kiekvienoje žiniatinklio naršyklėje yra tylus prielaida: kai ji atsisiunčia failą iš jūsų svetainės, ji bando išsiaiškinti, kokio tipo failas yra. Paprastai ji pasitiki jūsų serveriu. Bet jei jūsų serveris yra miglotas, naršyklė spės – ir tas spėjimas vadinamas MIME tipo uostymu.
Problema yra ta, kad užpuolikai gali žaisti tuo spėjimu. Jie gali sukurti failą, kurį jūsų serveris sąžiningai mano esant nekenksmingas paveikslėliu, bet kurį naršyklė, palikta spėti, nusprendžia esant programos kodo dalimi – ir tada jį vykdo, tiesiai jūsų kliento naršyklėje, jūsų domene.
Yra vienos eilutės nurodymas, kuris išjungia spėjimą: X-Content-Type-Options: nosniff. Jis sako kiekvienai naršyklei: „nespėk – pasitikėk tiksliai tuo, ką mano serveris tau sako.” Tai yra visas pataisymas. Jis nemokamas, užtrunka apie penkias minutes, ir teisingai sukurtoje svetainėje nieko nesulaužo.
Šis tikrinimas ieško tos antraštės. Jei jos nėra, prarandate 25 taškus ir ji vertinama kaip vidutinio rimtumo problema – ne todėl, kad antraštė pati savaime yra katastrofa, bet todėl, kad jos nebuvimas yra patikimas ženklas, kad pagrindai nebuvo užrakinti.
Kiek tai gali jus kainuoti
Tai yra realistiški, verslo lygio scenarijai – ne blogiausio atvejo teatras.
-
“Nekentsmingumas” priedas, kuris nebuvo. Jūs valdote palaikymo portalą ar turgavietę, kur klientai įkelia failus – kvitus, nuotraukas, dokumentus. Užpuolikas įkelia failą, kurį jūsų sistema saugo ir tarnauja kaip paveikslėliu. Be nosniff, aukos naršyklė spėja, kad failas iš tikrųjų yra scenarijus ir jį vykdo – tyliai vogdama to lankytojo prisijungusią sesiją jūsų svetainėje. Dabar užpuolikas yra jie: deda užsakymus, skaito žinutes, keičia detales. Sužinote, kai klientai pradeda skųstis dėl veiklos, kurios jie nedarė.
-
Sandoris, kuris stringa dėl saugumo klausimyno. Didesnio kliento pirkimų komanda paleidžia automatinį jūsų svetainės nuskaitymą prieš pasirašydama. Trūkstamos saugumo antraštės akimirksniu išryškėja. Net jei niekada nieko nebuvo išnaudota, ataskaita sako „pagrindinių žiniatinklio saugumo antraščių nėra,” ir staiga atsakote į taisymo klausimus ir atidėjote savo uždarymo datą savaitėmis – dėl pataisymo, kuriam prireiktų penkių minučių.
-
Kibernetinio draudimo atnaujinimas, kuris tampa sunkesnis. Daugiau draudikų dabar vykdo išorinius nuskaitymus prieš kotiruodami ar atnaujindami. Švarus antraščių profilis yra pigi higienos įrodymas; trūkstama yra mažas juodas ženklas, kuris, sukrautas su kitais, pastūmėja jūsų draudimo įmoką aukštyn ar jūsų sąlygas žemyn.
-
Reputacijos smūgis, kurio negalite lengvai atšaukti. Jei sesijų pagrobimo incidentas atseka atgal į failą, tarnaujamą iš jūsų domeno, istorija nėra „buvo trūkstama neaiški antraštė” – tai yra „[jūsų verslas] nuteko klientų paskyras.” Tai yra versija, kurią klientai prisimena, ir ji kainuoja daug daugiau nei pataisymas kada nors kainuotų.
Nė vienas iš jų nereikalauja rafinuoto užpuoliko. MIME tipo uostymo piktnaudžiavimas yra gerai suprastas ir automatizuotas, kas yra tiksliai kodėl nuskaitytuvai taip tvirtai žymi trūkstamą antraštę.
Kas tai iš tikrųjų yra
Kai naršyklė gauna failą, serveris turėtų jį pažymėti su turinio tipu (pavyzdžiui, image/png PNG paveikslėliui ar text/html žiniatinklio puslapiui). Istoriškai naršyklės nevisiškai pasitikėjo tuo ženklu – iš dalies todėl, kad kai kurie serveriai jį suklydino – todėl jos pažvelgtų į tikruosius failo baitus ir nuspręstų pačios. Tas žvilgsnis yra MIME tipo uostymas.
Tai buvo patogumas, kuris tapo atsakomybe. Jei užpuolikas gali gauti failą ant jūsų svetainės (per įkėlimo formą, komentarų laukelį, importuotą dokumentą) ir paveikti jo turinį, jie gali sukurti kažką, ką serveris pažymi nekenksmingas, bet kurį naršyklė uosto kaip vykdomą scenarijų. Tada naršyklė jį vykdo jūsų domene, su visu pasitikėjimu, kurį jūsų domenas neša.
X-Content-Type-Options: nosniff visiškai pašalina spėjimą. Kai nustatyta, naršyklei sakoma: naudokite serverio deklaruotą tipą ir nieko kito. Failas, pažymėtas kaip paveikslėlis, yra traktuojamas kaip paveikslėlis, baigta – net jei jo turinys atrodo kaip scenarijus. Atakos vektorius užsidaro.
Kaip atrodo „gerai”: kiekvienas atsakymas iš jūsų svetainės – puslapiai ir turiny – nešioja tiksliai šią antraštę:
X-Content-Type-Options: nosniff
Nėra jokios kitos galiojančios reikšmės ir nėra ko derinti. Jei jūsų CDN ir jūsų serveris abu ją prideda (todėl matote nosniff, nosniff), tai yra gerai ir vis tiek skaičiuojamas kaip praėjimas.
Kaip tai ištaisyti (nemokama, ~5 minutės)
Perduokite šį skyrių tam, kas valdo jūsų svetainę – IT asmeniui, žiniatinklio kūrėjui ar prieglobos palaikymui. Pataisymas yra nemokamas ir greitas; nėra ko pirkti. Ko prašote yra paprasta: „Pridėkite atsakymo antraštę X-Content-Type-Options: nosniff kiekvienam puslapiui ir turtiniam vienetui svetainėje.”
Čia yra detalė jiems, pagal bendrą platformą.
Cloudflare (ar panašus CDN/tarpinis serveris) – dažnai greičiausia vieta tai daryti, apimanti visą svetainę iš karto:
- Naudokite Atsakymo antraštės transformavimo taisyklę (Taisyklės → Transformavimo taisyklės → Modifikuoti atsakymo antraštę), kad nustatytumėte
X-Content-Type-Optionsįnosniffvisoms gaunamiems prašymams. Tai taikoma svetainei visoje apimtyje, neliečiant kilmės serverio.
Nginx – pridėkite atitinkamo server (ar location) bloke:
add_header X-Content-Type-Options "nosniff" always;
always raktinis žodis užtikrina, kad jis siunčiamas ir klaidų atsakymuose. Perkraukite Nginx po išsaugojimo.
Apache – reikia įjungto mod_headers; svetainės konfigūracijoje ar .htaccess:
Header always set X-Content-Type-Options "nosniff"
IIS / Windows priegloba – web.config po <system.webServer>:
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
Node / Express – nustatykite kiekvienam atsakymui:
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
next();
});
(Arba naudokite helmet paketą, kuris pagal numatytąjį nustato šią ir kelias kitas saugumo antraštes.)
Google Workspace / Microsoft 365 svetainės: jie valdo jūsų el. paštą ir dokumentus, ne jūsų viešą svetainės prieglobą, todėl antraštė čia nėra nustatyta – ji nustatyta ten, kur jūsų svetainė iš tikrųjų yra tarniaujama (jūsų CDN, žiniatinklio serveris ar svetainių kūrėjas). Jei naudojate prieglobos svetainių kūrėją (Squarespace, Wix, Shopify ir panašūs), daugelis ją automatiškai prideda jums; patikrinkite rezultatą, o ne prielaida, ir paprašykite jų palaikymo, jei jos nėra.
Po diegimo patikrinkite. Paleiskite nuskaitymą iš naujo arba turėkite savo kūrėją patikrinti atsakymo antraštes naršyklės kūrėjo įrankiuose (Tinklo skirtukas → spustelėkite bet kurį prašymą → Atsakymo antraštės) ir patvirtinkite, kad X-Content-Type-Options: nosniff yra. Išbandykite svetainę trumpai, kad patvirtintumėte, jog niekas stiliuoto ar su scenarijais nesugadino – teisingai sukurtoje svetainėje nieko nesugado.
Dažnos klaidos
- Nustatyta tik pagrindiniame puslapyje. Antraštė turi būti kiekviename atsakyme – įskaitant paveikslėlius, scenarijus, stiliaus lapus ir įkeltus failus – nes tai yra ištekliai, kuriuos uostymas veikia. Taikykite ją serverio ar CDN lygiu, kad ji būtų universali, ne puslapiuose.
- Klaida reikšmėje. Vienintelė galiojanti reikšmė yra
nosniff. Bet kas kita (tuščia reikšmė, klaida rašant) nepavyksta tikrinimui ir nesuteikia jokios apsaugos. Nuskaitytuvas pranešs vertę, kurią iš tikrųjų matė, todėl galite pastebėti rašybos klaidą. - Manant, kad tai pakeičia turinio saugumo politiką. nosniff yra vienas sluoksnis. Jis nekontroliuoja, kokie scenarijai leidžiami vykdyti – tai yra CSP darbas. Pridėkite nosniff dabar kaip greitą laimėjimą ir traktuokite tinkamą CSP kaip didesnį tolesnį veiksmą.
- „Dublikato” pašalinimas. Jei ir jūsų CDN, ir kilmė ją nustato, matysite ją du kartus. Tai nekenksminga – nešvaistykite laiko pašalinimui vieno.
- Mokėjimas už tai. Tai yra nemokamas konfigūracijos pakeitimas. Stebėsena, auditai ir portfelio prietaisų skydeliai yra teisėtai apmokamos; vienos antraštės pridėjimas nėra.
Perduokite tai savo IT asmeniui
Techninė santrauka: šis tikrinimas patikrina HTTP atsakymo antraštes ir praeina, kai X-Content-Type-Options yra ir jo (neatsižvelgiant į raidžių dydį) reikšmė yra nosniff – įskaitant kelių šaltinių nosniff, nosniff atvejį, kai CDN ir kilmė abu ją nustato. Trūkstama ar bet kuri ne-nosniff reikšmė nepavyksta. Tai yra vertinamas P2 tikrinimas, vertas 25 taškų, vertinamas vidutinio rimtumo, kai nepavyksta, ir susiejamas su OWASP Top 10 A05 (Saugumo netinkamas konfigūravimas). Taisymas yra viena statinė atsakymo antraštė, taikoma visuose atsakymuose; nėra parametrų ir nėra galiojančių alternatyvių reikšmių. Nustatykite jį krašte (CDN) visai svetainės aprėpčiai, ar žiniatinklio serveryje su always semantika, kad jis būtų išleistas klaidų atsakymuose, tada patvirtinkite atsakymo antraštėse.
DUK
Mes neleidžiame niekam įkelti failų. Ar mums vis tiek tai reikia?
Taip, ir vis tiek verta tai daryti. Antraštė yra gynybos gylis: ji taip pat sustabdo naršyklę nuo klaidingo scenarijų, stilių lapų ir duomenų failų, tarnaujamų iš jūsų pačios svetainės, interpretavimo, kas apsaugo nuo kelių kelių svetainių scenarijų triukų net svetainėse be įkėlimo formos. Ji nieko nekainuoja ir niekada nesulaužo teisingai sukonfigūruotos svetainės, todėl nėra jokios priežasties ją praleisti.
Ar tai pridėjimas sulaužys kažką mūsų svetainėje?
Beveik niekada. nosniff tiesiog priverčia naršykles gerbti turinio tipą, kurį jūsų serveris jau siunčia. Vienintelis būdas, kuris sukelia problemų, yra jei jūsų serveris klaidingai pažymi failus – pavyzdžiui, siunčia stilių lapą ar scenarijų su netinkamu tipu. Jei kažkas sulaužo, tai yra tikras klaidas, kurią nosniff atskleidė, o ne sukėlė, ir vis tiek verta ją ištaisyti. Išbandykite vieną kartą po diegimo.
Kaip iš tikrųjų atrodo 'gerai'?
Viena atsakymo antraštė kiekviename puslapyje ir turiniu: X-Content-Type-Options: nosniff. Tai visas teisingas konfigūravimas – nėra kitų galiojančių reikšmių ir nereikia jokių derinimų.
Mūsų CDN (Cloudflare ar panašus) ir mūsų serveris abu ją prideda – ar tai problema?
Ne. Du kartus matant reikšmę ('nosniff, nosniff'), nes CDN ir kilmė ją abu nustato, yra visiškai gerai ir vis tiek skaičiuojamas kaip praėjimas. Nereikia pašalinti vieno.
Ar tai ištaisymas kainuoja pinigų?
Ne. Pataisymas yra viena nemokama konfigūracijos eilutė jūsų žiniatinklio serveryje ar CDN. Bet kas, kas jums imtų mokestį už vienos antraštės pridėjimą, jus permokina. Vieninteliai dalykai, už kuriuos verta mokėti šioje srityje, yra nuolatinė stebėsena, portfelio vaizdas per daugelį svetainių ar formalus auditas – ne pats pataisymas.
Kuo tai skiriasi nuo turinio saugumo politikos (CSP)?
Jie papildo vienas kitą. CSP valdo, kokie scenarijai ir ištekliai gali apskritai įkelti; nosniff sustabdo naršyklę nuo failo, kurį ji įkelia, netinkamo klasifikavimo. Jums reikia abiejų. nosniff yra daug paprastesnis ir greitesnis pridėti, todėl jis yra geras pirmas žingsnis keliaujant prie visos CSP.