Defaults.Exposed › Naprawy › Ochrona przed odgadywaniem typu MIME (X-Content-Type-Options)
Jak naprawić Ochrona przed odgadywaniem typu MIME (X-Content-Type-Options)
Jednolinijkowy nagłówek, który powstrzymuje przeglądarki przed zgadywaniem, czym naprawdę jest plik. Bez niego plik wgrany przez kogoś na Twoją witrynę — albo plik na Twoich własnych stronach — może zostać błędnie odczytany przez przeglądarkę i uruchomiony jako kod, a właśnie tak niektóre ataki zamieniają niewinnie wyglądający plik w sposób na kradzież sesji Twoich klientów.
W skrócie dla Twojej firmy: Brak tego nagłówka to wyraźny, łatwy do wykrycia sygnał, że podstawy nie są na miejscu. Sam w sobie rzadko wyłącza witrynę, ale w połączeniu z formularzem wgrywania plików lub treścią tworzoną przez użytkowników otwiera atakującemu drogę do uruchomienia złośliwego kodu w przeglądarkach Twoich odwiedzających — przejęcia zalogowanych sesji, kradzieży danych z pól karty czy logowania i postawienia Cię po niewłaściwej stronie rozmowy o wycieku danych. To jedna z najtańszych poprawek w bezpieczeństwie: jedna linijka, darmowa, około pięciu minut.
Ile może Cię to kosztować
- Każda strona, na której klienci lub pracownicy mogą wgrywać pliki (awatary, dokumenty, załączniki do zgłoszeń, zdjęcia ogłoszeń), staje się możliwą wyrzutnią ataków po stronie przeglądarki.
- Atakujący może przebrać złośliwy kod za obraz lub plik tekstowy i sprawić, że przeglądarka odwiedzającego go uruchomi — kradnąc jego zalogowaną sesję na Twojej witrynie.
- Ankiety bezpieczeństwa, kontrole ubezpieczeń cybernetycznych i kupujący korporacyjni skanują w poszukiwaniu tego nagłówka; jego brak czyta się jako nie dbają o podstawy i może wstrzymać lub pogrążyć transakcję.
- Starsze przeglądarki i niektóre integracje odgadują typy treści i mogą błędnie obsłużyć pliki w sposób, który podważa zaufanie lub powoduje wyciek danych.
Dlaczego to ma znaczenie. Gdy serwer jest niejasny co do tego, czym jest plik, przeglądarki próbują zgadywać (odgadywać typ treści). Atakujący to wykorzystują: wgrywają plik, który serwer oznacza jako obraz, lecz tak spreparowany w środku, że przeglądarka uznaje go za JavaScript — i uruchamia. Nagłówek X-Content-Type-Options: nosniff mówi każdej przeglądarce, by przestała zgadywać i ufała typowi podanemu przez serwer, zamykając całą tę klasę podstępów. To punktowany test wart 25 punktów, oceniany przy braku jako średnia waga.
Krótka wersja dla właściciela
W każdą przeglądarkę wbudowane jest ciche założenie: gdy pobiera plik z Twojej witryny, próbuje ustalić, jaki to rodzaj pliku. Zwykle ufa Twojemu serwerowi. Ale jeśli serwer jest niejasny, przeglądarka zgadnie — a to zgadywanie nazywa się odgadywaniem typu MIME (MIME-sniffing).
Problem w tym, że atakujący potrafią zmanipulować to zgadywanie. Mogą spreparować plik, który Twój serwer szczerze uważa za nieszkodliwy obraz, lecz który przeglądarka, pozostawiona sama sobie, uzna za fragment kodu programu — i wtedy go uruchomi, prosto w przeglądarce Twojego klienta, na Twojej domenie.
Istnieje jednolinijkowe polecenie, które wyłącza to zgadywanie: X-Content-Type-Options: nosniff. Mówi każdej przeglądarce: „nie zgaduj — ufaj dokładnie temu, co mówi mój serwer”. To cała poprawka. Jest darmowa, zajmuje około pięciu minut, a na poprawnie zbudowanej witrynie niczego nie psuje.
Ten test szuka tego nagłówka. Jeśli go brak, tracisz 25 punktów i jest to oceniane jako problem średniej wagi — nie dlatego, że sam nagłówek to katastrofa, lecz dlatego, że jego brak to wiarygodny znak, że podstawy nie zostały dopięte.
Co to może Cię kosztować
To realistyczne, biznesowe scenariusze — nie teatr najgorszego przypadku.
-
„Nieszkodliwy załącznik”, który taki nie był. Prowadzisz portal wsparcia lub platformę handlową, gdzie klienci wgrywają pliki — paragony, zdjęcia, dokumenty. Atakujący wgrywa plik, który Twój system zapisuje i serwuje jako obraz. Bez nosniff przeglądarka ofiary zgaduje, że to faktycznie skrypt, i go uruchamia — po cichu kradnąc zalogowaną sesję tego odwiedzającego na Twojej witrynie. Teraz atakujący jest nim: składa zamówienia, czyta wiadomości, zmienia dane. Dowiadujesz się, gdy klienci zaczynają skarżyć się na działania, których nie wykonali.
-
Transakcja, która utyka na ankiecie bezpieczeństwa. Zespół zakupowy większego klienta przed podpisaniem uruchamia automatyczny skan Twojej witryny. Brakujące nagłówki bezpieczeństwa pojawiają się natychmiast. Nawet jeśli niczego nigdy nie wykorzystano, raport mówi „brak podstawowych nagłówków bezpieczeństwa web”, i nagle odpowiadasz na pytania o naprawę i przesuwasz datę zamknięcia o tygodnie — z powodu poprawki, która zajęłaby pięć minut.
-
Odnowienie ubezpieczenia cybernetycznego, które robi się trudniejsze. Coraz więcej ubezpieczycieli prowadzi teraz zewnętrzne skany przed wyceną lub odnowieniem. Czysty profil nagłówków to tani dowód higieny; brakujący to mały minus, który spiętrzony z innymi podbija Twoją składkę albo pogarsza warunki.
-
Cios w reputację, którego nie cofniesz łatwo. Jeśli incydent przejęcia sesji da się prześledzić do pliku serwowanego z Twojej domeny, opowieść nie brzmi „brakowało jakiegoś niejasnego nagłówka” — brzmi „[Twoja firma] doprowadziła do wycieku kont klientów”. To wersja, którą klienci zapamiętują, i kosztuje znacznie więcej, niż kiedykolwiek kosztowałaby poprawka.
Żaden z tych scenariuszy nie wymaga wyrafinowanego atakującego. Nadużywanie odgadywania typu MIME jest dobrze poznane i zautomatyzowane, i właśnie dlatego skanery tak stanowczo oznaczają brak tego nagłówka.
Czym to właściwie jest
Gdy przeglądarka odbiera plik, serwer powinien oznaczyć go typem treści (na przykład image/png dla obrazu PNG albo text/html dla strony WWW). Historycznie przeglądarki nie do końca ufały temu oznaczeniu — częściowo dlatego, że niektóre serwery się myliły — więc zaglądały do faktycznych bajtów pliku i decydowały same. To zaglądanie to odgadywanie typu MIME.
Była to wygoda, która stała się obciążeniem. Jeśli atakujący zdoła umieścić plik na Twojej witrynie (przez formularz wgrywania, pole komentarzy, zaimportowany dokument) i wpłynąć na jego zawartość, może spreparować coś, co serwer oznacza niewinnie, lecz co przeglądarka odgaduje jako wykonywalny skrypt. Przeglądarka uruchamia go wówczas na Twojej domenie, z całym zaufaniem, jakie Twoja domena niesie.
X-Content-Type-Options: nosniff całkowicie usuwa zgadywanie. Z ustawionym nagłówkiem przeglądarka dostaje polecenie: używaj typu zadeklarowanego przez serwer i niczego więcej. Plik oznaczony jako obraz jest traktowany jako obraz, kropka — nawet jeśli jego zawartość wygląda jak skrypt. Wektor ataku się zamyka.
Jak wygląda dobry stan: każda odpowiedź z Twojej witryny — i strony, i zasoby — niesie dokładnie ten nagłówek:
X-Content-Type-Options: nosniff
Nie ma innej prawidłowej wartości ani niczego do strojenia. Jeśli i CDN, i serwer oba go dodają (więc widzisz nosniff, nosniff), to w porządku i nadal liczy się jako zaliczenie.
Jak to naprawić (darmowo, ~5 minut)
Przekaż tę sekcję osobie zarządzającej Twoją witryną — Twojemu informatykowi, programiście WWW lub wsparciu hostingu. Poprawka jest darmowa i szybka; nie ma niczego do kupienia. Prosisz o coś prostego: „Dodaj nagłówek odpowiedzi X-Content-Type-Options: nosniff do każdej strony i każdego zasobu na witrynie”.
Oto szczegóły dla nich, wg częstych platform.
Cloudflare (lub podobny CDN/proxy) — często najszybsze miejsce, obejmuje całą witrynę naraz:
- Użyj reguły transformacji nagłówka odpowiedzi (Rules → Transform Rules → Modify Response Header), by ustawić
X-Content-Type-Optionsnanosniffdla wszystkich przychodzących żądań. Obejmuje to całą witrynę bez dotykania serwera origin.
Nginx — dodaj wewnątrz właściwego bloku server (lub location):
add_header X-Content-Type-Options "nosniff" always;
Słowo kluczowe always zapewnia wysyłkę także na odpowiedziach z błędem. Przeładuj Nginx po zapisaniu.
Apache — wymaga włączonego mod_headers; w konfiguracji witryny lub .htaccess:
Header always set X-Content-Type-Options "nosniff"
IIS / hosting Windows — w web.config pod <system.webServer>:
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
Node / Express — ustaw dla każdej odpowiedzi:
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
next();
});
(Albo użyj pakietu helmet, który ustawia ten i kilka innych nagłówków bezpieczeństwa domyślnie.)
Witryny na Google Workspace / Microsoft 365: te zarządzają Twoim e-mailem i dokumentami, nie hostingiem publicznej witryny, więc nagłówka nie ustawia się tam — ustawia się go tam, gdzie sama witryna jest serwowana (Twój CDN, serwer WWW lub kreator witryn). Jeśli używasz hostowanego kreatora (Squarespace, Wix, Shopify i podobne), wiele z nich dodaje ten nagłówek automatycznie; sprawdź wynik, zamiast zakładać, i zapytaj ich wsparcie, jeśli go brakuje.
Po wdrożeniu zweryfikuj. Uruchom ponownie skan albo poproś programistę, by sprawdził nagłówki odpowiedzi w narzędziach deweloperskich przeglądarki (zakładka Sieć → kliknij dowolne żądanie → Nagłówki odpowiedzi) i potwierdził obecność X-Content-Type-Options: nosniff. Przetestuj krótko witrynę, by potwierdzić, że nic ostylowanego ani skryptowanego się nie zepsuło — na poprawnie zbudowanej witrynie nic się nie zepsuje.
Częste błędy
- Ustawienie tylko na stronie głównej. Nagłówek musi być na każdej odpowiedzi — w tym obrazach, skryptach, arkuszach stylów i wgranych plikach — bo to właśnie te zasoby dotyka odgadywanie. Zastosuj go na poziomie serwera lub CDN, by był uniwersalny, nie strona po stronie.
- Literówka w wartości. Jedyną prawidłową wartością jest
nosniff. Cokolwiek innego (pusta wartość, błąd w pisowni) nie zalicza testu i nie daje żadnej ochrony. Skaner zgłosi wartość, którą faktycznie zobaczył, byś mógł wychwycić literówkę. - Zakładanie, że zastępuje Content Security Policy. nosniff to jedna warstwa. Nie kontroluje, które skrypty wolno uruchomić — to zadanie CSP. Dodaj teraz nosniff jako szybką wygraną, a właściwy CSP potraktuj jako większy kolejny krok.
- Usuwanie „duplikatu”. Jeśli i CDN, i origin go ustawiają, zobaczysz go dwa razy. To nieszkodliwe — nie trać czasu na usuwanie jednego.
- Płacenie za to. To darmowa zmiana konfiguracji. Monitorowanie, audyty i pulpity portfela słusznie są płatne; dodanie pojedynczego nagłówka nie.
Przekaż to swojemu informatykowi
Podsumowanie techniczne: ten test bada nagłówki odpowiedzi HTTP i zalicza, gdy X-Content-Type-Options jest obecny, a jego wartość (bez rozróżniania wielkości liter) zawiera nosniff — w tym wieloźródłowy przypadek nosniff, nosniff, gdy i CDN, i origin oba go ustawiają. Brak lub jakakolwiek wartość inna niż nosniff oznacza niezaliczenie. To punktowany test P2 wart 25 punktów, oceniany przy niezaliczeniu jako średnia waga, mapowany na OWASP Top 10 A05 (Błędna konfiguracja zabezpieczeń). Naprawa to pojedynczy statyczny nagłówek odpowiedzi zastosowany na wszystkich odpowiedziach; nie ma parametrów ani prawidłowych wartości alternatywnych. Ustaw go na brzegu (CDN) dla pokrycia całej witryny albo na serwerze WWW z semantyką always, by był emitowany też na odpowiedziach z błędem, a następnie potwierdź w nagłówkach odpowiedzi.
Najczęstsze pytania
Nie pozwalamy nikomu wgrywać plików. Czy nadal tego potrzebujemy?
Tak, i nadal warto to zrobić. Ten nagłówek to obrona w głąb: powstrzymuje też przeglądarkę przed błędnym odczytem skryptów, arkuszy stylów i plików danych serwowanych z Twojej własnej witryny, co chroni przed kilkoma podstępami typu cross-site scripting nawet na witrynach bez formularza wgrywania. Nic nie kosztuje i nigdy nie psuje poprawnie skonfigurowanej witryny, więc nie ma powodu, by go pominąć.
Czy dodanie tego coś zepsuje na naszej witrynie?
Niemal nigdy. nosniff sprawia po prostu, że przeglądarki respektują typ treści, który Twój serwer już wysyła. Jedyny sposób, by sprawiło kłopot, to gdy serwer błędnie oznacza pliki — na przykład wysyła arkusz stylów lub skrypt z niewłaściwym typem. Jeśli coś się zepsuje, to prawdziwy błąd, który nosniff ujawnił, a nie spowodował, i tak czy inaczej warto go naprawić. Przetestuj raz po wdrożeniu.
Jak właściwie wygląda dobry stan?
Pojedynczy nagłówek odpowiedzi na każdej stronie i każdym zasobie: X-Content-Type-Options: nosniff. To cała poprawna konfiguracja — nie ma innych prawidłowych wartości ani niczego do strojenia.
Nasz CDN (Cloudflare lub podobny) i nasz serwer oba go dodają — czy to problem?
Nie. Zobaczenie wartości dwa razy (nosniff, nosniff), bo i CDN, i origin ją ustawiają, jest całkowicie w porządku i nadal zalicza. Nie musisz usuwać jednej z nich.
Czy naprawa tego kosztuje pieniądze?
Nie. Poprawka to jedna linijka darmowej konfiguracji na Twoim serwerze WWW lub CDN. Każdy, kto pobiera od Ciebie opłatę za dodanie pojedynczego nagłówka, zawyża cenę. Jedyne, za co warto płacić w tym obszarze, to bieżące monitorowanie, widok portfela wielu witryn lub formalny audyt — nie sama poprawka.
Czym to się różni od Content Security Policy (CSP)?
Uzupełniają się. CSP kontroluje, które skrypty i zasoby w ogóle wolno załadować; nosniff powstrzymuje przeglądarkę przed błędną klasyfikacją pliku, który już ładuje. Chcesz obu. nosniff jest znacznie prostszy i szybszy do dodania, więc to dobry pierwszy krok w drodze do pełnego CSP.