Defaults.Exposed

Defaults.ExposedRemedieri › Protecție MIME-sniffing (X-Content-Type-Options)

Cum să remediezi Protecție MIME-sniffing (X-Content-Type-Options)

Un antet pe o linie care oprește browserele să ghicească ce fel de fișier este cu adevărat. Fără el, un fișier pe care cineva îl încarcă pe site-ul tău — sau un fișier pe propriile tale pagini — poate fi citit greșit de browser și rulat ca și cod, ceea ce este exact modul în care unele atacuri transformă o încărcare cu aspect inofensiv într-o modalitate de a fura sesiunile clienților tăi.

Concluzia pentru afacerea ta: Lipsa acestui antet este un semn clar și scanabil că elementele de bază nu sunt la locul lor. De unul singur rareori ia un site offline, dar combinat cu un formular de încărcare de fișiere sau conținut generat de utilizator deschide o cale pentru un atacator să ruleze cod malițios în browserele vizitatorilor tăi — deturnând sesiunile autentificate, furând detalii de introducere a cardului sau de autentificare și punându-te în poziția greșită într-o conversație de breșă de date. Este una din cele mai ieftine remedieri în securitate: o linie, gratuită, aproximativ cinci minute.

Ce te poate costa

De ce contează. Browserele, atunci când un server este vag despre ce este un fișier, vor încerca să ghicească ('sniff') tipul de conținut. Atacatorii exploatează acea ghicire: încarcă un fișier pe care serverul îl etichetează ca imagine, dar creează conținutul astfel că browserul decide că este de fapt JavaScript — și îl rulează. Antetul X-Content-Type-Options: nosniff spune fiecărui browser să nu mai ghicească și să aibă încredere în tipul declarat al serverului, închizând acea clasă întreagă de truc. Este o verificare notată valorând 25 de puncte și este notată cu severitate medie când lipsește.

Versiunea scurtă pentru proprietar

Există o presupunere silențioasă integrată în fiecare browser web: când descarcă un fișier de pe site-ul tău, încearcă să dea seama ce fel de fișier este. De obicei are încredere în serverul tău. Dar dacă serverul tău este vag, browserul va ghici — iar acea ghicire se numește MIME-sniffing.

Problema este că atacatorii pot manipula ghicirea. Pot crea un fișier pe care serverul tău îl crede în mod cinstit că este o imagine inofensivă, dar pe care browserul, lăsat să ghicească, decide că este de fapt o bucată de cod de program — și îl rulează, direct în browserul clientului tău, pe domeniul tău.

Există o instrucțiune pe o linie care dezactivează ghicirea: X-Content-Type-Options: nosniff. Spune fiecărui browser: “nu ghici — ai încredere exact în ce îți spune serverul meu.” Aceasta este toată remedierea. Este gratuită, durează aproximativ cinci minute și pe un site bine construit nu strică nimic.

Această verificare caută acel antet. Dacă lipsește, pierzi 25 de puncte și este notat o problemă de severitate medie — nu pentru că antetul singur este o catastrofă, ci pentru că absența sa este un semn fiabil că elementele de bază nu au fost blocate.

Ce te poate costa

Acestea sunt scenarii realiste la nivel de afacere — nu teatru de cel mai rău caz.

Niciunul din acestea nu necesită un atacator sofisticat. Abuzul MIME-sniffing este bine înțeles și automatizat, ceea ce este exact de ce scannere semnalează atât de ferm antetul lipsă.

Ce este de fapt

Când un browser primește un fișier, serverul ar trebui să îl eticheteze cu un tip de conținut (de exemplu, image/png pentru o imagine PNG sau text/html pentru o pagină web). Istoric, browserele nu aveau complet încredere în acea etichetă — parțial deoarece unele servere o greșeau — deci s-ar uita la octeții actuali ai fișierului și ar decide singure. Acea privire este MIME-sniffing.

A fost o comoditate care a devenit o răspundere. Dacă un atacator poate obține un fișier pe site-ul tău (prin intermediul unui formular de încărcare, unui câmp de comentarii, unui document importat) și poate influența conținutul acestuia, poate crea ceva pe care serverul îl etichetează inofensiv dar pe care browserul îl sniff-uiește ca script executabil. Browserul îl rulează pe domeniul tău, cu toată încrederea pe care domeniul tău o poartă.

X-Content-Type-Options: nosniff elimină complet ghicitul. Cu aceasta setat, browserul este instruit: folosește tipul declarat al serverului și nimic altceva. Un fișier etichetat ca imagine este tratat ca imagine, gata — chiar dacă conținutul lui arată ca script. Vectorul de atac se închide.

Cum arată “bine”: fiecare răspuns de pe site-ul tău — pagini și assets deopotrivă — poartă exact acest antet:

X-Content-Type-Options: nosniff

Nu există altă valoare validă și nimic de reglat. Dacă atât CDN-ul cât și serverul tău îl adaugă (deci vezi nosniff, nosniff), aceasta este bine și tot se numără ca trecere.

Cum se remediază (gratuit, ~5 minute)

Predă această secțiune celui care rulează site-ul tău — persoana IT, dezvoltatorul web sau suportul de găzduire. Remedierea este gratuită și rapidă; nu există nimic de cumpărat. Ceea ce ceri este simplu: “Adaugă antetul de răspuns X-Content-Type-Options: nosniff la fiecare pagină și asset de pe site.”

Iată detaliul pentru ei, pe platformă comună.

Cloudflare (sau un CDN/proxy similar) — adesea cel mai rapid loc de a o face, acoperind întregul site dintr-o dată:

Nginx — adaugă în interiorul blocului relevant server (sau location):

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

Cuvântul cheie always asigură că este trimis și pe răspunsurile de eroare. Reîncarcă Nginx după salvare.

Apache — necesită mod_headers activat; în configurarea site-ului sau .htaccess:

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

IIS / găzduire Windows — în web.config sub <system.webServer>:

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

Node / Express — setează pentru fiecare răspuns:

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

(Sau folosește pachetul helmet, care setează acesta și mai multe alte antete de securitate implicit.)

Site-uri Google Workspace / Microsoft 365: acestea gestionează email-ul și documentele tale, nu găzduirea site-ului tău web public, deci antetul nu este setat acolo — este setat oriunde este servit de fapt site-ul tău web (CDN-ul tău, serverul web sau constructorul de site-uri). Dacă folosești un constructor de site-uri găzduit (Squarespace, Wix, Shopify și similare), multe adaugă automat acest antet; verifică rezultatul mai degrabă decât să presupui.

După deployare, verifică. Rulează din nou scanarea sau cere dezvoltatorului tău să verifice antetele de răspuns în instrumentele de dezvoltare ale browserului (tab Rețea → dă clic pe orice cerere → Antete de răspuns) și confirmă că X-Content-Type-Options: nosniff este prezent. Testează site-ul pe scurt pentru a confirma că nimic cu stil sau script nu s-a stricat — pe un site construit corect, nimic nu va fi.

Greșeli comune

Predă asta persoanei tale IT

Rezumat tehnic: această verificare inspectează antetele de răspuns HTTP și trece când X-Content-Type-Options este prezent și valoarea sa (insensibilă la majuscule) conține nosniff — inclusiv cazul cu mai multe surse nosniff, nosniff unde un CDN și originea îl setează ambele. Lipsă sau orice valoare non-nosniff eșuează. Este o verificare P2 notată valorând 25 de puncte, notată cu severitate medie când eșuează și se mapează la OWASP Top 10 A05 (Configurare de Securitate Greșită). Remedierea este un singur antet de răspuns static aplicat pe toate răspunsurile; nu există parametri și nicio altă valoare validă alternativă. Setează-l la margine (CDN) pentru acoperire la nivel de site, sau la serverul web cu semantică always astfel că este emis și pe răspunsurile de eroare, apoi confirmă în antetele de răspuns.

Întrebări frecvente

Nu permitem nimănui să încarce fișiere. Avem totuși nevoie de aceasta?

Da, și merită în continuare să o faci. Antetul este apărare în profunzime: oprește de asemenea browserul să citească greșit scripturi, foi de stil și fișiere de date servite de pe propriul tău site, ceea ce protejează împotriva mai multor trucuri de cross-site scripting chiar și pe site-uri fără formular de încărcare. Nu costă nimic și nu strica niciodată un site configurat corect, deci nu există niciun motiv să îl omiți.

Va strica adăugarea acestuia ceva pe site-ul nostru?

Aproape niciodată. nosniff pur și simplu face ca browserele să respecte tipul de conținut pe care serverul tău îl trimite deja. Singura cale prin care cauzează probleme este dacă serverul tău etichetează greșit fișiere — de exemplu trimițând o foaie de stil sau un script cu tipul greșit. Dacă ceva se strică, aceasta este o eroare reală pe care nosniff a expus-o mai degrabă decât a cauzat-o și merită oricum remediată. Testează o dată după deployare.

Cum arată de fapt 'bine'?

Un singur antet de răspuns pe fiecare pagină și asset: X-Content-Type-Options: nosniff. Aceasta este întreaga configurare corectă — nu există alte valori valide și nicio reglare de făcut.

CDN-ul nostru (Cloudflare sau similar) și serverul nostru îl adaugă ambii — este aceasta o problemă?

Nu. A vedea valoarea de două ori ('nosniff, nosniff') deoarece atât CDN-ul cât și originea îl setează este complet bine și tot trece. Nu trebuie să elimini unul.

Remedierea costă bani?

Nu. Remedierea este o linie de configurare gratuită pe serverul tău web sau CDN. Oricine îți percepe taxe pentru a adăuga un singur antet suprataxează. Singurul lucru pentru care merită plătit în această zonă este monitorizarea continuă, o vedere portofoliu pe mai multe site-uri sau un audit formal — nu remedierea în sine.

Cum este aceasta diferită de o Politică de Securitate a Conținutului (CSP)?

Sunt complementare. CSP controlează ce scripturi și resurse sunt permise să se încarce deloc; nosniff oprește browserul să clasifice greșit un fișier pe care îl încarcă. Vrei ambele. nosniff este mult mai simplu și mai rapid de adăugat, deci este un bun prim pas pe drumul spre un CSP complet.