Defaults.Exposed › Korjaukset › MIME-sniffing-suojaus (X-Content-Type-Options)
Kuinka korjata MIME-sniffing-suojaus (X-Content-Type-Options)
Yksirivi otsikko, joka estää selaimia arvailemasta, mikä tiedosto todella on. Ilman sitä tiedosto, jonka joku lataa sivustollesi – tai tiedosto omilla sivuillasi – voidaan lukea väärin selaimessa ja ajaa koodina, mikä on täsmälleen se tapa, jolla jotkut hyökkäykset muuttavat harmittomalta näyttävän latauksen tavaksi varastaa asiakkaidesi istunnot.
Lyhyesti liiketoiminnallesi: Puuttuva otsikko on selkeä, skannattava merkki siitä, että perusasiat eivät ole paikoillaan. Yksinään se harvoin kaataa sivustoa, mutta yhdistettynä tiedostojen lataamiseen tai käyttäjien tuottamaan sisältöön se avaa hyökkääjälle polun ajaa haitallista koodia kävijöidesi selaimissa – kaapaten kirjautuneiden istunnot, varastamalla korttitiedot tai kirjautumistiedot, ja asettaen sinut väärälle puolelle tietomurtokeskustelua. Se on yksi halvimmista tietoturvakorjauksista: yksi rivi, ilmainen, noin viisi minuuttia.
Mitä tämä voi maksaa sinulle
- Jokainen sivu, jossa asiakkaat tai henkilökunta voi ladata tiedostoja (avataret, asiakirjat, tukiliitteet, listakuvat), muuttuu mahdolliseksi hyökkäyspisteeksi selaimen puolella.
- Hyökkääjä voi naamioida haitallisen koodin kuvaksi tai tekstitiedostoksi ja saada kävijän selaimen ajamaan sen – varastamalla heidän kirjautuneen istuntonsa sivustollasi.
- Tietoturvakyselylomakkeet, kyberturvallisuusvakuutustarkistukset ja yritysostajat skannaavat tämän otsikon; sen puuttuminen luetaan 'eivät tee perusasioita' ja voi pysäyttää tai tuhota sopimuksen.
- Vanhat selaimet ja jotkut integraatiot 'haistaa' sisältötyypit ja voivat käsitellä tiedostoja väärin tavoin, jotka rikkovat luottamusta tai vuotavat dataa.
Miksi tällä on merkitystä. Selaimet, kun palvelin on epämääräinen siitä, mikä tiedosto on, yrittävät arvata ('haistaa') sisältötyypin. Hyökkääjät hyödyntävät tätä arvausta: lataavat tiedoston, jonka palvelin merkitsee kuvaksi, mutta muotoilevat sen sisällön niin, että selain päättää sen olevan JavaScript – ja ajaa sen. X-Content-Type-Options: nosniff -otsikko kertoo jokaiselle selaimelle lopettaa arvaaminen ja luottaa palvelimen ilmoittamaan tyyppiin, sulkien koko tämän luokan temppuja. Se on pisteytetty tarkistus, jonka arvo on 25 pistettä, ja se arvioidaan keskitason vakavuutena puuttuessaan.
Lyhyt versio omistajalle
Jokaiseen verkkoselaimeen on rakennettu hiljainen olettamus: kun se lataa tiedoston sivustoltasi, se yrittää selvittää, minkä tyyppinen tiedosto se on. Yleensä se luottaa palvelimesi kertomaan. Mutta jos palvelimesi on epämääräinen, selain arvaa – ja tätä arvausta kutsutaan MIME-sniffingiksi.
Ongelma on, että hyökkääjät voivat pelata arvauksen kanssa. He voivat muotoilla tiedoston, jonka palvelimesi vilpittömästi uskoo olevan harmittoman kuvan, mutta jonka selain arvauksensa perusteella päättää olevan itse asiassa ohjelmakoodi – ja ajaa sen, suoraan asiakkaasi selaimessa, verkkotunnuksellasi.
On yksirivi ohje, joka kytkee arvaamisen pois päältä: X-Content-Type-Options: nosniff. Se kertoo jokaiselle selaimelle: “älä arvaa – luota täsmälleen siihen, mitä palvelimeni kertoo sinulle.” Siinä koko korjaus. Se on ilmainen, vie noin viisi minuuttia, ja oikein rakennetulla sivustolla se ei riko mitään.
Tämä tarkistus etsii tätä otsikkoa. Jos se puuttuu, menetät 25 pistettä ja se arvioidaan keskitason vakavuuden ongelmaksi – ei koska otsikko yksinään on katastrofi, vaan koska sen puuttuminen on luotettava merkki siitä, että perusasioita ei ole lukittu.
Mitä tämä voi maksaa yrityksellesi
Nämä ovat realistisia, liiketoimintatasoisia skenaarioita – ei pahin mahdollinen skenaario.
-
“Harmittomaton liite”, joka ei ollut sitä. Ylläpidät tukiportaalia tai markkinapaikkaa, jossa asiakkaat lataavat tiedostoja – kuitteja, valokuvia, asiakirjoja. Hyökkääjä lataa tiedoston, jonka järjestelmäsi tallentaa ja tarjoilee kuvana. Ilman nosnifia uhrin selain arvaa tiedoston olevan skripti ja ajaa sen – varastamalla hiljaa kyseisen kävijän kirjautuneen istunnon sivustollasi. Nyt hyökkääjä on heidän: tekee tilauksia, lukee viestejä, muuttaa tietoja. Kuulet siitä, kun asiakkaat alkavat valittaa toiminnasta, jota he eivät tehneet.
-
Sopimus, joka pysähtyy tietoturvakyselyyn. Suuremman asiakkaan hankintatiimi suorittaa automaattisen sivustoskannauksen ennen allekirjoittamista. Puuttuvat tietoturvaotsikot näkyvät välittömästi. Vaikka mitään ei koskaan hyödynnetty, raportti sanoo “perus-webturva-otsikot puuttuvat,” ja yhtäkkiä vastaatkin korjauskysymyksiin ja siirrät sulkupäivämäärääsi viikkoja eteenpäin – korjauksen takia, joka olisi kestänyt viisi minuuttia.
-
Kyberturvallisuusvakuutuksen uusinta, joka vaikeutuu. Yhä useammat vakuuttajat suorittavat ulkoisia skannauksia ennen tarjouksen antamista tai uusimista. Siisti otsikkoprofiili on halpa näyttö hygieniasta; puuttuva on pieni musta merkki, joka pinoaa muiden kanssa ja nostaa preemiotasi tai laskee ehtojasi.
-
Mainevaurio, jota et pysty helposti kumoamaan. Jos istunnonkaappaustapaus jäljitetään verkkotunnukseltasi tarjoiltuun tiedostoon, tarina ei ole “epäselvä otsikko puuttui” – se on “[yrityksesi] vuoti asiakastilejä.” Se on versio, jonka asiakkaat muistavat, ja se maksaa paljon enemmän kuin korjaus koskaan olisi maksanut.
Mikään näistä ei edellytä kehittynyttä hyökkääjää. MIME-sniffingin väärinkäyttö on hyvin ymmärrettyä ja automatisoitua, ja juuri siksi skannerit merkitsevät puuttuvan otsikon niin tiukasti.
Mitä se oikeasti on
Kun selain vastaanottaa tiedoston, palvelimen pitäisi merkitä se sisältötyypillä (esimerkiksi image/png PNG-kuvalle tai text/html verkkosivulle). Historiallisesti selaimet eivät täysin luottaneet tuohon merkintään – osaksi koska jotkut palvelimet saivat sen väärin – joten ne kurkistavat tiedoston todellisiin tavuihin ja päättävät itse. Tätä kurkistamista on MIME-sniffing.
Se oli mukavuus, josta tuli riski. Jos hyökkääjä saa tiedoston sivustollesi (latamaislomakkeen, kommenttikenttän tai tuodun asiakirjan kautta) ja vaikuttaa sen sisältöön, he voivat muotoilla jotain, jonka palvelin merkitsee harmittomasti, mutta jonka selain haistaa ajettavaksi skriptiksi. Selain ajaa sen sitten verkkotunnuksellasi, kaikella luottamuksella, jonka verkkotunnuksesi kantaa.
X-Content-Type-Options: nosniff poistaa arvailun kokonaan. Sen ollessa asettettuna, selaimelle kerrotaan: käytä palvelimen ilmoittamaa tyyppiä eikä muuta. Kuvaksi merkitty tiedosto käsitellään kuvana, piste – vaikka sen sisältö näyttäisikin skriptiltä. Hyökkäysvektori sulkeutuu.
Miltä “hyvä” näyttää: jokainen sivustosi vastaus – sivut ja resurssit yhtäläisesti – kantaa täsmälleen tämän otsikon:
X-Content-Type-Options: nosniff
Ei muita kelvollisia arvoja eikä säätämistä. Jos CDN:si ja palvelimesi molemmat lisäävät sen (näet siis nosniff, nosniff), se on ok ja läpäisee silti.
Korjausohje (ilmainen, n. 5 minuuttia)
Anna tämä osio verkkosivustoasi hallinnoivalle – IT-henkilöllesi, webkehittäjällesi tai hosting-tuelle. Korjaus on ilmainen ja nopea; ei mitään ostettavaa. Pyydät yksinkertaisesti: “Lisää vastaustaho X-Content-Type-Options: nosniff jokaiselle sivulle ja resurssille sivustossa.”
Tässä yksityiskohdat heille, yleisimmän alustan mukaan.
Cloudflare (tai vastaava CDN/proxy) – usein nopein paikka tehdä se, kattaen koko sivuston kerralla:
- Käytä Response Header Transform Rule -sääntöä (Säännöt → Muuntosäännöt → Muokkaa vastaustahoa) asettaaksesi
X-Content-Type-Optionsarvoonnosniffkaikille saapuville pyynnöille. Tämä soveltaa sen sivustolaajuisesti koskematta lähtöpalvelimeen.
Nginx – lisää asianmukaisen server (tai location) lohkon sisään:
add_header X-Content-Type-Options "nosniff" always;
always-avainsana varmistaa, että se lähetetään myös virhevastauksia. Lataa Nginx uudelleen tallentamisen jälkeen.
Apache – vaatii mod_headers käytössä; sivustokonfiguraatiossa tai .htaccess:issa:
Header always set X-Content-Type-Options "nosniff"
IIS / Windows-hosting – web.config:issa <system.webServer>:n alla:
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
Node / Express – aseta jokaiseen vastaukseen:
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
next();
});
(Tai käytä helmet-pakettia, joka asettaa tämän ja muita tietoturvaotsikkoja oletuksena.)
Google Workspace / Microsoft 365 -sivustot: nämä hallinnoivat sähköpostiasi ja asiakirjojasi, ei julkista websivustoasi, joten otsikkoa ei aseteta siellä – se asetetaan siellä, missä verkkosivustosi todella tarjoillaan (CDN:ssäsi, verkkopalvelimessasi tai sivustonrakentajassasi). Jos käytät isännöityä sivustonrakentajaa (Squarespace, Wix, Shopify ja vastaavat), monet lisäävät tämän otsikon automaattisesti puolestasi; tarkista tulos olettamisen sijaan, ja kysy heidän tueltaan, jos se puuttuu.
Käyttöönoton jälkeen vahvista. Suorita skannauksesi uudelleen, tai anna kehittäjäsi tarkistaa vastaustahot selaimen kehittäjätyökaluilla (Verkko-välilehti → klikkaa mitä tahansa pyyntöä → Vastaustahot) ja vahvista, että X-Content-Type-Options: nosniff on läsnä. Testaa sivusto lyhyesti varmistaaksesi, ettei mikään tyylitetty tai skriptattu rikkoutunut – oikein rakennetulla sivustolla mikään ei rikkoudu.
Yleisimmät virheet
- Asettaminen vain etusivulle. Otsikon täytyy olla jokaisessa vastauksessa – mukaan lukien kuvissa, skripteissä, tyylitiedostoissa ja ladatuissa tiedostoissa – koska ne ovat resursseja, joihin sniffing vaikuttaa. Aseta se palvelimen tai CDN:n tasolla jotta se on yleinen, ei sivu kerrallaan.
- Kirjoitusvirhe arvossa. Ainoa kelvollinen arvo on
nosniff. Mikä tahansa muu (tyhjä arvo, kirjoitusvirhe) epäonnistuu tarkistuksen ja ei tarjoa suojaa. Skanneri raportoi todellisen arvon, jota se näki, jotta voit havaita kirjoitusvirheen. - Olettaminen, että se korvaa Content Security Policyn. nosniff on yksi kerros. Se ei hallitse, mitä skriptejä saa ajaa – se on CSP:n tehtävä. Lisää nosniff nyt nopeana voittona, ja kohtele kunnollista CSP:tä isompana jatkovaiheena.
- “Duplikaatin” poistaminen. Jos sekä CDN että lähtöpalvelin asettavat sen, näet sen kahdesti. Se on vaaratonta – älä tuhlaa aikaa poistamaan toista.
- Maksaminen siitä. Se on ilmainen konfiguraatiomuutos. Seuranta, tarkastukset ja portfolionäkymät ovat laillisesti maksullisia; yksittäisen otsikon lisääminen ei ole.
UKK
Emme anna kenenkään ladata tiedostoja. Tarvitsemmeko silti tämän?
Kyllä, ja se kannattaa silti tehdä. Otsikko on syvyyspuolustus: se estää myös selainta lukemasta väärin omalta sivustoltasi tarjoiltuja skriptejä, tyylitiedostoja ja datatiedostoja, mikä suojaa useita sivustojen välisiä skriptaustemppuja vastaan myös sivustoilla, joilla ei ole latauslomaketta. Se ei maksa mitään eikä koskaan riko oikein rakennettua sivustoa, joten ei ole syytä jättää se lisäämättä.
Rikkoutuuko sivustomme jos lisäämme tämän?
Lähes koskaan. nosniff yksinkertaisesti saa selaimet kunnioittamaan sisältötyyppiä, jonka palvelimesi jo lähettää. Ainoa tapa aiheuttaa ongelmia on jos palvelimesi merkitsee tiedostoja väärin – esimerkiksi lähettää tyylitiedoston tai skriptin väärällä tyypillä. Jos jotain rikkoutuu, se on todellinen bugi, jonka nosniff paljasti eikä aiheuttanut, ja se kannattaa korjata joka tapauksessa. Testaa kerran käyttöönoton jälkeen.
Miltä 'hyvä' oikeasti näyttää?
Yksittäinen vastaustaho jokaisessa sivussa ja resurssissa: X-Content-Type-Options: nosniff. Se on koko oikea konfiguraatio – ei muita kelvollisia arvoja eikä säätämistä.
Sekä CDN (Cloudflare tai vastaava) että palvelimemme lisäävät sen – onko se ongelma?
Ei. Arvon näkeminen kahdesti ('nosniff, nosniff'), koska sekä CDN että lähtöpalvelin asettavat sen, on täysin ok ja läpäisee silti. Ei tarvitse poistaa toista.
Maksaako tämän korjaaminen?
Ei. Korjaus on yksi rivi ilmaista konfiguraatiota verkkopalvelimessasi tai CDN:ssäsi. Kukaan, joka veloittaa sinua yksittäisen otsikon lisäämisestä, laskuttaa liikaa. Ainoa asia, josta kannattaa maksaa tässä alueella, on jatkuva seuranta, portfolionäkymä useille sivustoille tai muodollinen tarkastus – ei itse korjaus.
Miten tämä eroaa Content Security Policysta (CSP)?
Ne täydentävät toisiaan. CSP hallitsee, mitä skriptejä ja resursseja ylipäätään saa ladata; nosniff estää selainta luokittelemasta väärin tiedostoa, jonka se lataa. Haluat molemmat. nosniff on paljon yksinkertaisempi ja nopeampi lisätä, joten se on hyvä ensiaskel kohti täyttä CSP:tä.