Nagłówki zabezpieczeń są podzbiorem nagłówków odpowiedzi HTTP, które mogą być ustawiane przez serwer sieciowy, z którego każdy stosuje kontrolę zabezpieczeń w przeglądarkach. Nagłówki HTTP to forma metadanych wysyłanych wraz z żądaniami i odpowiedziami internetowymi. Nagłówek zabezpieczeń „X-Content-Type-Options” uniemożliwia przeglądarkom wykonywanie sniffingu MIME.
Uwaga: nagłówki HTTP nie są wyłączne dla HTTP i są również używane w HTTPS.
Co to jest wąchanie MIME?
Gdy jakiekolwiek dane są przesyłane przez Internet, jednym z dołączonych fragmentów metadanych jest typ MIME. Wielozadaniowe rozszerzenia poczty internetowej lub typy MIME to standard używany do definiowania typu danych zawartych w pliku, który wskazuje, jak plik powinien być traktowany. Zazwyczaj typ MIME składa się z typu i podtypu z opcjonalnym parametrem i wartością. Na przykład plik tekstowy UTF-8 miałby typ MIME „text/plain;charset=UTF-8”. W tym przykładzie typ to „text”, podtyp to „plain”, parametr to „charset”, a wartość to „UTF-8”.
Aby zapobiec błędnemu etykietowaniu i niewłaściwej obsłudze plików, serwery internetowe zazwyczaj wykonują sniffowanie MIME. Jest to proces, w którym wyraźnie określony typ MIME jest ignorowany, a zamiast tego analizowany jest początek pliku. Większość typów plików zawiera sekwencje nagłówków, które wskazują, jaki to typ pliku. W większości przypadków typy MIME są poprawne, a sniffowanie pliku nie ma znaczenia. Jeśli jednak istnieje różnica, serwery WWW użyją wykrytego typu pliku, aby określić, jak obsłużyć plik, a nie zadeklarowanego typu MIME.
Problem pojawia się, gdy atakującemu uda się przesłać plik, taki jak obraz PNG, ale plik jest w rzeczywistości czymś innym, jak kod JavaScript. W przypadku podobnych typów plików, takich jak dwa typy tekstu, może to nie powodować większego problemu. Staje się jednak poważnym problemem, jeśli zamiast tego można wykonać całkowicie nieszkodliwy plik.
Co robią X-Content-Type-Options?
Nagłówek X-Content-Type-Options ma tylko jedną możliwą wartość „X-Content-Type-Options: nosniff”. Włączenie tego informuje przeglądarkę użytkownika, że nie może ona wykonywać sniffingu typu MIME i zamiast tego polegać na jawnie zadeklarowanej wartości. Bez tego ustawienia, jeśli złośliwy plik JavaScript zostałby zamaskowany jako obraz, taki jak PNG, plik JavaScript zostałby wykonany. Po włączeniu opcji X-Content-Type-Options plik będzie traktowany jako obraz, którego nie można załadować, ponieważ plik nie ma prawidłowego formatu obrazu.
X-Content-Type-Options nie jest szczególnie potrzebne w witrynie internetowej, która korzysta wyłącznie z zasobów własnych, ponieważ nie ma szans na przypadkowe udostępnienie złośliwego pliku. Jeśli witryna korzysta z treści stron trzecich, takich jak zasoby zewnętrzne lub przesłane przez użytkowników, X-Content-Type-Options zapewnia ochronę przed tego typu atakami.