Defaults.Exposed

Defaults.ExposedOpravy › Ochrana pred MIME-sniffingom (X-Content-Type-Options)

Ako opraviť Ochrana pred MIME-sniffingom (X-Content-Type-Options)

Jednoriadková hlavička, ktorá zabraňuje prehliadačom hádať, čo súbor v skutočnosti je. Bez nej môže súbor, ktorý niekto nahrá na vašu stránku — alebo súbor na vašich vlastných stránkach — prehliadač nesprávne prečítať a spustiť ako kód, čo je presne spôsob, akým niektoré útoky premenia zdanlivo nevinné nahrávanie na spôsob kradnutia relácií zákazníkov.

Podstata pre vaše podnikanie: Chýbajúca táto hlavička je jasným, skenovateľným znakom, že základy nie sú zaistené. Sama o sebe zriedkavo zhodí stránku, ale v kombinácii s formulárom na nahrávanie súborov alebo obsahom generovaným používateľmi otvára cestu útočníkovi na spúšťanie škodlivého kódu v prehliadačoch vašich návštevníkov — unesenie prihlásených relácií, krádež prihlasovacích alebo karetných údajov a vystavenie vás rozhovoru o narušení dát. Je to jedna z najlacnejších opráv v bezpečnosti: jeden riadok, zadarmo, asi päť minút.

Čo vás to môže stáť

Prečo na tom záleží. Prehliadače, keď server je vágny o tom, čo súbor je, sa pokúsia hádať ('sniff') typ obsahu. Útočníci zneužívajú toto hádanie: nahrajú súbor, ktorý server poctivo označí ako obrázok, ale ktorého obsah spôsobí, že prehliadač rozhodne, že je to vlastne JavaScript — a spustí ho. Hlavička X-Content-Type-Options: nosniff hovorí každému prehliadaču, aby prestal hádať a dôveroval deklarovanému typu servera, čím sa uzatvára celá táto trieda triku. Je to hodnotená kontrola stojaca 25 bodov a hodnotená ako stredná závažnosť pri absencii.

Stručná verzia pre majiteľa

Do každého webového prehliadača je zabudovaný tichý predpoklad: keď stiahne súbor z vašej stránky, pokúsi sa zistiť, akého druhu súbor to je. Zvyčajne dôveruje vášmu serveru. Ale ak je váš server vágny, prehliadač bude hádať — a to hádanie sa nazýva MIME-sniffing.

Problémom je, že útočníci môžu hru manipulovať. Môžu vytvoriť súbor, ktorý váš server poctivo považuje za nevinný obrázok, ale prehliadač, ponechaný hádanie, rozhodne, že je to vlastne program kód — a potom ho spustí, priamo vo vnútri zákazníkovho prehliadača, na vašej doméne.

Existuje jednoriadková inštrukcia, ktorá vypína hádanie: X-Content-Type-Options: nosniff. Hovorí každému prehliadaču: “nehádaj — dôveruj presne tomu, čo ti hovorí môj server.” To je celá oprava. Je zadarmo, trvá asi päť minút a na správne postavnej stránke nič neporuší.

Táto kontrola hľadá túto hlavičku. Ak chýba, stratíte 25 bodov a je hodnotená ako stredne závažný problém — nie preto, že hlavička sama osebe je katastrofou, ale preto, že jej absencia je spoľahlivým znakom, že základy neboli zaistené.

Čo vás to môže stáť

Čo to v skutočnosti je

Keď prehliadač dostane súbor, server by ho mal označiť typom obsahu (napríklad, image/png pre PNG obrázok alebo text/html pre webovú stránku). Historicky prehliadače plne nedôverovali tomuto označeniu — čiastočne preto, že niektoré servery to urobili zle — takže nahliadli na skutočné bajty súboru a sami rozhodli. To nahliadnutie je MIME-sniffing.

Bola to pohodlnosť, ktorá sa stala záväzkom. Ak môže útočník dostať súbor na vašu stránku (cez formulár na nahrávanie, pole komentárov, importovaný dokument) a ovplyvniť jeho obsah, môže vytvoriť niečo, čo server nevinne označí, ale prehliadač pačichá ako spustiteľný skript. Prehliadač ho potom spustí na vašej doméne, so všetkou dôverou, ktorú vaša doména nesie.

X-Content-Type-Options: nosniff úplne odstraňuje hádanie. S jej nastavením je prehliadač povedaný: používaj deklarovaný typ servera a nič iné. Súbor označený ako obrázok je zaobchádzaný ako obrázok — dokonca aj keď jeho obsah vyzerá ako skript. Vektor útoku sa uzatvára.

Ako vyzerá ‘dobré’ nastavenie: každá odpoveď z vašej stránky — stránky a aktíva rovnako — nesie presne túto hlavičku:

X-Content-Type-Options: nosniff

Neexistuje žiadna iná platná hodnota a nie je čo ladiť. Ak vaša CDN a váš server ju oba pridajú (takže vidíte nosniff, nosniff), je to v poriadku a stále sa počíta ako priechod.

Ako to opraviť (zadarmo, ~5 minút)

Odovzdajte túto sekciu tomu, kto spravuje váš web — vášmu IT pracovníkovi, webovému vývojárovi alebo podpore hostingu. Oprava je zadarmo a rýchla; nie je nič na kúpenie. Čo žiadate, je jednoduché: “Pridajte hlavičku odpovede X-Content-Type-Options: nosniff na každú stránku a aktívum na stránke.”

Cloudflare (alebo podobná CDN/proxy) — často najrýchlejšie miesto na to, pokrývajúc celú stránku naraz:

Nginx — pridajte do príslušného bloku server (alebo location):

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

Kľúčové slovo always zabezpečí, že je odosielané aj pri chybových odpovediach. Znovu načítajte Nginx po uložení.

Apache — vyžaduje povolenie mod_headers; v konfigurácii stránky alebo .htaccess:

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

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

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

Node / Express — nastavte ju pre každú odpoveď:

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

(Alebo použite balíček helmet, ktorý nastaví toto a niekoľko ďalších bezpečnostných hlavičiek predvolene.)

Po nasadení to overte. Znovu spustite váš sken alebo nechajte vášho vývojára skontrolovať hlavičky odpovede v nástrojoch pre vývojárov prehliadača (záložka Sieť → kliknite na akúkoľvek požiadavku → Hlavičky odpovede) a potvrďte, že X-Content-Type-Options: nosniff je prítomný.

Bežné chyby

FAQ

Nenecháme nikoho nahrávať súbory. Stále to potrebujeme?

Áno a stále stojí za to urobiť. Hlavička je obrana do hĺbky: tiež zabraňuje prehliadaču nesprávne čítať skripty, štýlové listy a dátové súbory poskytované z vašej vlastnej stránky, čo chráni pred niekoľkými trikmi cross-site skriptingu dokonca aj na stránkach bez formulára na nahrávanie. Nič nestojí a nikdy neporuší správne nakonfigurovanú stránku, takže nie je dôvod ju preskočiť.

Poruší pridanie tohto niečo na našej webovej stránke?

Takmer nikdy. nosniff jednoducho núti prehliadače rešpektovať typ obsahu, ktorý váš server už odosiela. Jediný spôsob, akým spôsobí problémy, je ak váš server nesprávne označuje súbory — napríklad posiela štýlový list alebo skript s nesprávnym typom. Ak sa niečo poruší, je to skutočná chyba, ktorú nosniff odhalil namiesto spôsobenia, a stojí za opravu tak či tak.

Ako vyzerá 'dobré' nastavenie?

Jedna hlavička odpovede na každej stránke a aktíve: X-Content-Type-Options: nosniff. To je celá správna konfigurácia — neexistujú žiadne iné platné hodnoty a nie je čo ladiť.

Naša CDN (Cloudflare alebo podobná) a náš server ju oba pridávajú — je to problém?

Nie. Vidieť hodnotu dvakrát ('nosniff, nosniff'), pretože ju nastavila CDN aj pôvod, je úplne v poriadku a stále prechádza. Nemusíte odstrániť žiadnu.

Stojí oprava peňazí?

Nie. Oprava je jeden riadok bezplatnej konfigurácie na vašom webovom serveri alebo CDN. Ktokoľvek, kto vám účtuje pridanie jednej hlavičky, predražuje. Jedine veci, za ktoré sa oplatí platiť v tejto oblasti, sú priebežné monitorovanie, zobrazenie portfólia naprieč mnohými stránkami alebo formálny audit — nie samotná oprava.

Čím sa to líši od Content Security Policy (CSP)?

Sú komplementárne. CSP kontroluje, ktoré skripty a zdroje smú vôbec načítavať; nosniff zabraňuje prehliadaču nesprávne klasifikovať súbor, ktorý načíta. Chcete oboje. nosniff je oveľa jednoduchší a rýchlejší na pridanie, takže je dobrým prvým krokom na ceste k plnej CSP.