Defaults.Exposed

Defaults.ExposedJavítások › MIME-sniffing elleni védelem (X-Content-Type-Options)

Hogyan javítsd ki: MIME-sniffing elleni védelem (X-Content-Type-Options)

Egyetlen soros fejléc, amely megakadályozza, hogy a böngészők kitalálják, mi valójában egy fájl. Enélkül egy fájl, amelyet valaki feltölt az oldaladra – vagy egy fájl a saját oldalaidon – a böngésző által félreolvasható és kódként futtatható, ami pontosan az a módszer, ahogyan egyes támadások egy ártalmatlannak tűnő feltöltést eszközzé változtatnak az ügyfelek munkameneteinek ellopásához.

Az üzleted szempontjából lényeg: Ennek a fejlécnek a hiánya egyértelmű, vizsgálható jele annak, hogy az alapok nincsenek rendben. Önmagában ritkán vesz le egy oldalt, de egy fájlfeltöltési űrlappal vagy felhasználók által generált tartalommal kombinálva utat nyit egy támadónak rosszindulatú kód futtatásához a látogatók böngészőiben – bejelentkezett munkamenetek eltérítéséhez, kártya- vagy bejelentkezési adatok ellopásához, és egy adatvédelmi incidensről szóló párbeszédben a rossz oldalon találáshoz. Ez az egyik legolcsóbb javítás a biztonságban: egy sor, ingyenes, kb. öt perc.

Mibe kerülhet ez neked

Miért fontos. A böngészők, ha a szerver nem egyértelmű arról, mi egy fájl, megpróbálják kitalálni ('szagolni') a tartalom-típust. A támadók kihasználják ezt a találgatást: tölts fel egy fájlt, amelyet a szerver képnek jelöl, de faragj meg, hogy tartalmával a böngésző eldöntse, hogy az valójában JavaScript – és futtassa azt. Az X-Content-Type-Options: nosniff fejléc megmondja minden böngészőnek, hogy hagyja abba a találgatást, és bízzon meg a szerver által megadott típusban, bezárva az egész ilyen trükk-osztályt. Ez egy pontozásos ellenőrzés, amely 25 pontot ér, és hiányzásakor közepes súlyosságúnak minősül.

Röviden az üzemeltetőnek

Van egy csendes feltételezés, amely minden webböngészőbe be van égve: amikor letölt egy fájlt az oldaladról, megpróbálja kideríteni, milyen típusú fájl. Általában megbízik a szerverben. De ha a szerver nem egyértelmű, a böngésző találgat – ezt hívják MIME-sniffingnek.

A probléma az, hogy a támadók kijátszhatják a találgatást. Olyan fájlt alkothatnak, amelyet a szervered őszintén ártalmatos képnek hisz, de amelyet a böngésző, ha szabadon találgat, valójában programkódnak dönt – és ezután futtatja, közvetlenül az ügyfeled böngészőjében, a domainedhöz tartozó teljes bizalommal.

Van egy egysoros utasítás, amely kikapcsolja a találgatást: X-Content-Type-Options: nosniff. Megmondja minden böngészőnek: ‘ne találgass – bízz pontosan abban, amit a szerverem mond neked.’ Ez az egész javítás. Ingyenes, kb. öt percet vesz igénybe, és egy helyesen megépített oldalon semmit sem törik.

Ez az ellenőrzés ezt a fejlécet keresi. Ha hiányzik, 25 pontot veszítesz, és közepes súlyosságú problémaként minősül – nem azért, mert a fejléc önmagában katasztrófa, hanem mert hiánya megbízható jele annak, hogy az alapok nincsenek lezárva.

Mibe kerülhet ez neked

Ezek valós, vállalkozás szintű forgatókönyvek – nem worst-case dramaturgia.

Ezek egyike sem igényel kifinomult támadót. A MIME-sniffing visszaélés jól értett és automatizált, ami pontosan az oka annak, hogy a szkennerek olyan határozottan megjelölik a hiányzó fejlécet.

Mi is ez pontosan

Amikor egy böngésző fájlt kap, a szervere az adott fájlt tartalom-típussal jelöli meg (például image/png egy PNG-képhez vagy text/html egy weblaphoz). Történelmileg a böngészők nem bíztak teljesen ebben a jelölésben – részben azért, mert egyes szerverek rosszul csinálták –, tehát bepillantottak a fájl tényleges bájtjaiba, és maguk döntöttek. Ez a bepillantás a MIME-sniffing.

Ez egy kényelmi megoldás volt, amely felelősséggé vált. Ha egy támadó képes fájlt a te oldaladra juttatni (egy feltöltési ű, egy megjegyzőmező, egy importált dokumentum révén), és befolyásolhatja a tartalmát, olyan dolgot tud alkotni, amelyet a szerver ártatlanul jelöl, de a böngésző végrehajtható szkriptnek sniffel. A böngésző ezután futtatja a domainedhöz tartozó teljes bizalommal.

Az X-Content-Type-Options: nosniff teljesen eltávolítja a találgatást. Beállítva a böngészőnek azt mondják: használd a szerver által nyilatkoztatott típust és semmi mást. Egy képnek jelölt fájlt képként kezelnek, pont – még ha a tartalma szkriptnek is tűnik. A támadási vektor bezárul.

Mit jelent a „jó” beállítás: az oldaladról minden válasz – oldalak és eszközök egyaránt – pontosan ezt a fejlécet viseli:

X-Content-Type-Options: nosniff

Nincs más érvényes érték és nincs hangolnivaló. Ha a CDN-ed és a szervered is hozzáadja (tehát nosniff, nosniff-et látsz), ez rendben van és még mindig megfelelőként számít.

Hogyan javítsd ki (ingyenes, ~5 perc)

Add ezt a részt annak, aki a weboldaladat kezeli – az IT-személyednek, webfejlesztőnek vagy tárhely ügyfélszolgálatnak. A javítás ingyenes és gyors; nincs mit venni. Amit kérsz, egyszerű: ‘Add hozzá az X-Content-Type-Options: nosniff válasz fejlécet az oldal és az eszközök minden válaszához.’

Íme a részlet számukra, általános platformok szerint.

Cloudflare (vagy hasonló CDN/proxy) – sokszor a leggyorsabb hely, az egész oldalt egyszerre lefedve:

Nginx – adj hozzá a megfelelő server (vagy location) blokkba:

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

Az always kulcsszó biztosítja, hogy hibaválaszokon is el legyen küldve. Töltsd újra a Nginx-et mentés után.

Apache – szükséges mod_headers engedélyezve; az oldal konfigurációjában vagy .htaccess-ben:

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

IIS / Windows tárhely – a web.config-ban az <system.webServer> alatt:

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

Node / Express – minden válaszhoz állítsd be:

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

(Vagy használd a helmet csomagot, amely ezt és több biztonsági fejlécet alapból beállít.)

Google Workspace / Microsoft 365 oldalak: ezek az e-mailedet és dokumentumaidat kezelik, nem a nyilvános webhely-tárhelyedet, tehát a fejléc nincs ott beállítva – ott van beállítva, ahol a weboldalad ténylegesen kiszolgálásra kerül (CDN-ed, webszervered vagy site-builder-ed). Ha hosztolt site-buildert (Squarespace, Wix, Shopify és hasonlók) használsz, sok hozzáadja ezt a fejlécet automatikusan; ellenőrizd az eredményt feltételezés helyett.

Telepítés után ellenőrizd. Futtasd újra a vizsgálatot, vagy kérd meg a fejlesztőt, hogy ellenőrizze a válasz fejléceket a böngésző fejlesztői eszközeiben, és erősítse meg az X-Content-Type-Options: nosniff meglétét. Teszteld röviden az oldalt, hogy erősítsd meg, hogy semmi stílusos vagy szkriptelt nem törött – egy helyesen megépített oldalon semmi nem fog.

Általános hibák

GYIK

Nem engedjük meg senkinek fájlok feltöltését. Még mindig szükségünk van erre?

Igen, és még mindig érdemes megcsinálni. A fejléc mélységi védekezés: megakadályozza azt is, hogy a böngésző félreolvassa a saját oldaladról kiszolgált szkripteket, stíluslapokat és adatfájlokat, ami számos cross-site scripting trükk ellen véd, még fájlfeltöltési ű nélküli oldalaknál is. Semmibe sem kerül, és egy helyesen konfigurált oldalon soha nem törik semmit, tehát nincs ok kihagyni.

Ez tönkretesz valamit a weboldalunkon?

Szinte soha. A nosniff egyszerűen arra készteti a böngészőket, hogy tiszteletben tartsák azt a tartalom-típust, amelyet a szervered már küld. Az egyetlen módja, hogy problémát okozzon, ha a szervered hibásan jelöl fájlokat – például stíluslap vagy szkript küldése rossz típussal. Ha valami tönkremegy, ez egy valódi hiba, amelyet a nosniff feltárt, nem okozott, és mindenképpen érdemes javítani. Telepítés után tesztelj egyszer.

Mi minősül 'jónak' valójában?

Egyetlen válasz fejléc minden oldalon és eszközön: X-Content-Type-Options: nosniff. Ez az egész helyes konfiguráció – nincs más érvényes érték, és nincs hangolnivaló.

A CDN-ünk (Cloudflare vagy hasonló) és a szerverünk is hozzáadja – ez problémás?

Nem. Az érték kétszer látása ('nosniff, nosniff'), mert mind a CDN, mind az eredeti beállítja, teljesen rendben van és még mindig megfelel. Nem kell eltávolítanod az egyiket.

Pénzbe kerül-e ez a javítás?

Nem. A javítás egyetlen sor ingyenes konfiguráció a webszerveredben vagy CDN-edben. Aki azért számít fel díjat, hogy egyetlen fejlécet adjon hozzá, túláraz. Az ezen a területen érdemes fizetni valóban a folyamatos figyelés, egy portfólió-nézet több oldalon, vagy egy formális audit – nem maga a javítás.

Miben különbözik ez a Content Security Policy-tól (CSP)?

Egymást kiegészítik. A CSP azt ellenőrzi, mely szkriptek és erőforrások tölthetnek be egyáltalán; a nosniff megakadályozza, hogy a böngésző félre-kategorizáljon egy betöltött fájlt. Mindkettőt akarod. A nosniff sokkal egyszerűbb és gyorsabb hozzáadni, tehát jó első lépés egy teljes CSP felé vezető úton.