Defaults.Exposed › Opravy › Ochrana proti MIME-sniffingu (X-Content-Type-Options)
Jak opravit Ochrana proti MIME-sniffingu (X-Content-Type-Options)
Jednořádková hlavička, která zastaví prohlížeče v hádání, co soubor skutečně je. Bez ní může soubor, který někdo nahraje na váš web — nebo soubor na vašich vlastních stránkách — být prohlížečem špatně přečten a spuštěn jako kód, přesně tak probíhají některé útoky, kdy nevinně vypadající nahrávka se stane způsobem, jak krást relace vašich zákazníků.
Výsledek pro vaše podnikání: Chybějící tato hlavička je jasný, snadno zjistitelný signál, že základy nejsou na místě. Sama o sobě web jen zřídka strhne, ale v kombinaci s formulářem pro nahrávání souborů nebo uživatelsky generovaným obsahem otevírá cestu útočníkovi ke spuštění škodlivého kódu v prohlížečích vašich návštěvníků — únos přihlášených relací, kradení údajů o kartě nebo přihlašovacích údajů a postavení vás na špatnou stranu rozhovoru o narušení dat. Je to jedna z nejlevnějších oprav v zabezpečení: jeden řádek, zdarma, asi pět minut.
Co vás to může stát
- Jakákoliv stránka, kde zákazníci nebo zaměstnanci mohou nahrávat soubory (avatary, dokumenty, přílohy podpory, fotografie inzerátů), se stává možným odpalovacím místem pro útoky na straně prohlížeče.
- Útočník může zamaskovat škodlivý kód jako obrázek nebo textový soubor a nechat prohlížeč návštěvníka ho spustit — ukrást jejich přihlášenou relaci na vašem webu.
- Bezpečnostní dotazníky, kontroly kybernetického pojištění a podnikoví kupující skenují tuto hlavičku; její nepřítomnost je čtena jako 'nedělají základy' a může zastavit nebo potopení obchodu.
- Starší prohlížeče a některé integrace 'sniffují' typy obsahu a mohou špatně zpracovávat soubory způsoby, které narušují důvěru nebo způsobují úniky dat.
Proč na tom záleží. Prohlížeče, když je server neurčitý ohledně toho, co soubor je, se pokusí uhodnout ('sniffovat') typ obsahu. Útočníci toto hádání zneužívají: nahrají soubor, který server poctivě označí jako obrázek, ale jehož obsah je vytvořen tak, aby ho prohlížeč rozhodl, že je to skutečně JavaScript — a spustí ho. Hlavička X-Content-Type-Options: nosniff říká každému prohlížeči, aby přestal hádat a důvěřoval deklarovanému typu serveru, uzavírající celou třídu triků. Je to hodnocená kontrola stojící 25 bodů a je hodnocena jako střední závažnost, pokud chybí.
Krátká verze pro majitele
V každém webovém prohlížeči je zabudovaný tichý předpoklad: když stáhne soubor z vašeho webu, pokusí se zjistit, jaký druh souboru to je. Obvykle důvěřuje vašemu serveru. Ale pokud je váš server neurčitý, prohlížeč uhodne — a toto hádání se nazývá MIME-sniffing.
Problém je, že útočníci mohou hádání zmanipulovat. Mohou vytvořit soubor, který váš server poctivě věří, že je nevinný obrázek, ale prohlížeč, ponechaný hádání, rozhodne, že je to ve skutečnosti kus kódu programu — a pak ho spustí, přímo uvnitř prohlížeče vašeho zákazníka, ve vaší doméně.
Existuje jednořádková instrukce, která hádání vypne: X-Content-Type-Options: nosniff. Říká každému prohlížeči: “nehádej — věř přesně tomu, co ti říká můj server.” To je celá oprava. Je zdarma, trvá asi pět minut a na správně postaveném webu nic nerozbije.
Tato kontrola hledá tuto hlavičku. Pokud chybí, ztratíte 25 bodů a je hodnocena jako problém střední závažnosti — nikoli proto, že by samotná hlavička byla katastrofa, ale protože její nepřítomnost je spolehlivým signálem, že základy nebyly uzamčeny.
Co vás to může stát
Toto nejsou abstraktní scénáře. Jsou to realistické, obchodní úrovně situací — ne nejhorší možné divadlo.
-
‘Nevinná příloha’, která jí nebyla. Provozujete portál podpory nebo tržiště, kde zákazníci nahrávají soubory — účtenky, fotografie, dokumenty. Útočník nahraje soubor, který váš systém uloží a obsluhuje jako obrázek. Bez nosniff prohlížeč oběti uhodne, že soubor je vlastně skript a spustí ho — tiše ukrást přihlášenou relaci tohoto návštěvníka na vašem webu. Nyní je útočník jimi: zadávání objednávek, čtení zpráv, změna údajů. Dozvíte se o tom, když zákazníci začnou stěžovat na aktivitu, kterou neudělali.
-
Obchod, který stagnuje na bezpečnostním dotazníku. Nákupní tým většího zákazníka spustí automatický sken vašeho webu před podpisem. Chybějící bezpečnostní hlavičky se okamžitě zobrazí. I když nikdy nic nebylo zneužito, zpráva říká “základní bezpečnostní hlavičky webu chybí” a náhle odpovídáte na otázky o nápravě a tlačíte datum uzavření o týdny — kvůli opravě, která by trvala pět minut.
-
Obnova kybernetického pojištění, která se stává obtížnější. Více pojistitelů nyní provozuje externí skeny před nabídkou nebo obnovou. Čistý profil hlaviček je levný důkaz hygieny; chybějící je malá černá skvrna, která kumulovaná s ostatními jemně zvyšuje vaše pojistné nebo snižuje podmínky.
-
Poškození pověsti, které nelze snadno napravit. Pokud incident kradení relace sledovatelný k souboru obsluhovanému z vaší domény, příběh není “chyběla obscurní hlavička” — je to “[vaše firma] unikla zákaznické účty.” To je verze, kterou si zákazníci pamatují a stojí daleko více než oprava kdykoli.
Žádný z těchto případů nevyžaduje sofistikovaného útočníka. Zneužití MIME-sniffingu je dobře pochopeným a automatizovaným, přesně proto skenery tak pevně označují chybějící hlavičku.
Co to vlastně je
Když prohlížeč obdrží soubor, server ho má označit typem obsahu (například image/png pro obrázek PNG nebo text/html pro webovou stránku). Historicky prohlížeče tomuto označení plně nevěřily — částečně proto, že některé servery to dělaly špatně — takže se podívaly na skutečné bajty souboru a rozhodly samy. To podívání je MIME-sniffing.
Byla to pohodlnost, která se stala závazkem. Pokud útočník může dostat soubor na váš web (přes formulář pro nahrávání, pole komentáře, importovaný dokument) a ovlivnit jeho obsah, může vytvořit něco, co server označí nevinně, ale prohlížeč sniffuje jako spustitelný skript. Prohlížeč ho pak spustí ve vaší doméně se vší důvěrou, kterou vaše doméne nese.
X-Content-Type-Options: nosniff zcela odstraní domněnky. Při nastavení je prohlížeči řečeno: použij deklarovaný typ serveru a nic jiného. Soubor označený jako obrázek je zacházeno jako s obrázkem, tečka — i když jeho obsah vypadá jako skript. Vektor útoku se uzavírá.
Jak vypadá ‘dobré’: každá odpověď z vašeho webu — stránky i assety — nese přesně tuto hlavičku:
X-Content-Type-Options: nosniff
Neexistuje žádná jiná platná hodnota a nic k ladění. Pokud vaše CDN i váš server ji přidají (takže vidíte nosniff, nosniff), to je v pořádku a stále se počítá jako průchod.
Jak to opravit (zdarma, ~5 minut)
Předejte tuto část tomu, kdo provozuje váš web — vašemu IT pracovníkovi, webovému vývojáři nebo podpoře hostingu. Oprava je zdarma a rychlá; není nic k nákupu. Co žádáte je jednoduché: “Přidejte hlavičku odpovědi X-Content-Type-Options: nosniff na každou stránku a asset webu.”
Zde jsou podrobnosti pro ně, podle běžných platforem.
Cloudflare (nebo podobné CDN/proxy) — often nejrychlejší místo, pokrývající celý web najednou:
- Použijte Pravidlo transformace hlavičky odpovědi (Pravidla → Transformační pravidla → Upravit hlavičku odpovědi) k nastavení
X-Content-Type-Optionsnanosniffpro všechny příchozí požadavky. Toto ho aplikuje na celý web bez dotyku origin serveru.
Nginx — přidejte uvnitř relevantního bloku server (nebo location):
add_header X-Content-Type-Options "nosniff" always;
Klíčové slovo always zajistí, že je odesláno i na chybové odpovědi. Po uložení znovu načtěte Nginx.
Apache — vyžaduje povolené mod_headers; v konfiguraci webu nebo .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 pro každou odpověď:
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
next();
});
(Nebo použijte balíček helmet, který standardně nastavuje tuto a několik dalších bezpečnostních hlaviček.)
Weby Google Workspace / Microsoft 365: tyto spravují váš e-mail a dokumenty, nikoli hostování vašeho veřejného webu, takže hlavička se nenastavuje tam — nastavuje se kdekoliv je váš web sám obsluhován (váš CDN, webový server nebo tvůrce webu). Pokud používáte hostovaného tvůrce webu (Squarespace, Wix, Shopify a podobní), mnozí přidávají tuto hlavičku za vás automaticky; zkontrolujte výsledek místo předpokladu a zeptejte se jejich podpory, pokud chybí.
Po nasazení, ověřte. Znovu spusťte sken nebo nechte vývojáře zkontrolovat hlavičky odpovědi ve vývojářských nástrojích prohlížeče (karta Síť → klikněte na jakýkoliv požadavek → Hlavičky odpovědi) a potvrďte, že X-Content-Type-Options: nosniff je přítomno. Stručně otestujte web a potvrďte, že se nic stylizovaného nebo skriptovaného nerozbilo — na správně postaveném webu se nic nerozbije.
Běžné chyby
- Nastavení pouze na domovské stránce. Hlavička musí být na každé odpovědi — včetně obrázků, skriptů, stylů a nahraných souborů — protože ty jsou zdroji, které sniffing ovlivňuje. Aplikujte ji na úrovni serveru nebo CDN, aby byla univerzální, nikoli stránku po stránce.
- Překlep v hodnotě. Jediná platná hodnota je
nosniff. Cokoli jiného (prázdná hodnota, překlep) kontrolu selže a neposkytuje žádnou ochranu. Skener oznámí hodnotu, kterou skutečně viděl, abyste mohli překlep najít. - Předpoklad, že nahrazuje Content Security Policy. nosniff je jedna vrstva. Nekontroluje, které skripty smí spouštět — to je práce CSP. Přidejte nosniff nyní jako rychlou výhru a zacházejte s řádnou CSP jako s větším krokem.
- Odstraňování ‘duplikátu’. Pokud vaše CDN i origin ji nastaví, uvidíte ji dvakrát. To je neškodné — neutrácej čas odstraňováním jednoho.
- Platit za to. Je to bezplatná změna konfigurace. Monitoring, audity a palubní desky portfolia jsou legitimně placeny; přidání jediné hlavičky není.
Časté dotazy
Nenecháme nikoho nahrávat soubory. Stále to potřebujeme?
Ano, a stále to stojí za to. Hlavička je obrana do hloubky: také zastaví prohlížeč v nesprávném čtení skriptů, stylů a datových souborů obsluhovaných z vašeho vlastního webu, což chrání před několika triky cross-site scriptingu i na webech bez formuláře pro nahrávání. Nestojí nic a nikdy nerozbije správně nakonfigurovaný web, takže není důvod to přeskakovat.
Rozbije přidání tohoto cokoli na našem webu?
Téměř nikdy. nosniff jednoduše nutí prohlížeče ctít typ obsahu, který váš server již odesílá. Jediný způsob, jak způsobí problémy, je pokud váš server špatně označuje soubory — například odesílá stylesheet nebo skript se špatným typem. Pokud se něco rozbije, je to skutečná chyba, kterou nosniff odhalil, nikoli způsobil, a stojí za to to stejně opravit. Po nasazení jednou otestujte.
Jak 'dobré' nastavení vlastně vypadá?
Jedna hlavička odpovědi na každé stránce a assetu: X-Content-Type-Options: nosniff. To je celá správná konfigurace — nejsou žádné jiné platné hodnoty a nic k ladění.
Naše CDN (Cloudflare nebo podobné) i náš server ji přidávají — je to problém?
Ne. Vidět hodnotu dvakrát ('nosniff, nosniff') protože CDN i origin ji nastavily, je zcela v pořádku a stále se počítá jako průchod. Nemusíte jednu odstraňovat.
Stojí oprava peníze?
Ne. Oprava je jeden řádek bezplatné konfigurace na vašem webovém serveru nebo CDN. Kdokoliv, kdo vám účtuje za přidání jediné hlavičky, přeplatí. Jediné věci, za které se platí v této oblasti, jsou průběžné sledování, pohled na portfolio přes mnoho webů nebo formální audit — nikoli samotná oprava.
Jak se to liší od Content Security Policy (CSP)?
Jsou komplementární. CSP kontroluje, které skripty a zdroje smí vůbec načíst; nosniff zastaví prohlížeč v nesprávném klasifikování souboru, který načte. Chcete obojí. nosniff je daleko jednodušší a rychlejší k přidání, takže je dobrým prvním krokem na cestě k plné CSP.