Kalo te përmbajtja
SEO Analyzer

Siguri

Koka X-Content-Type-Options

Ndalon shfletuesin të hamendësojë llojin e një skedari; një vlerë e vetme, nosniff.

Çfarë është

Kjo kokë ka vetëm një vlerë të vlefshme: nosniff. Ajo i thotë shfletuesit ta besojë Content-Type-in që dërgoi serveri dhe të mos përpiqet ta hamendësojë nga përmbajtja.

Hamendësimi — *MIME sniffing* — u shpik kur serverët shpesh e deklaronin gabim llojin. Shfletuesi shikonte bajtet e para dhe vendoste vetë: nëse dukej si HTML, e trajtonte si HTML pavarësisht deklarimit.

Kjo sjellje e dobishme u bë dobësi sigurie: një skedar i ngarkuar nga përdoruesi, i deklaruar si tekst, mund të hamendësohej si HTML dhe të ekzekutohej.

Pse ka rëndësi

Skenari është konkret. Sajti yt lejon ngarkimin e skedarëve — një CV, një foto profili. Sulmuesi ngarkon një skedar që përmban HTML me JavaScript brenda dhe i vë emrin cv.txt. Serveri e shërben si text/plain, gjë krejt e saktë.

Pa nosniff, shfletuesi shikon bajtet, sheh <script>, dhe vendos se është HTML. Kodi ekzekutohet — nga domaini yt, me cookie-t e tua.

Pra kjo kokë e kthen një ngarkim skedari nga rrezik në asgjë.

Ka edhe një përfitim të dytë, jo sigurie: nosniff e detyron shfletuesin të mos ngarkojë skripta dhe stile me lloj të gabuar. Kjo i kap gabimet e konfigurimit menjëherë, në vend që t'i lërë të punojnë rastësisht derisa një ditë të mos punojnë.

Si rregullohet

X-Content-Type-Options: nosniff

Hapat:

  • Vendose globalisht, për çdo përgjigje. Nuk ka rast ku të dëmtojë.
  • Sigurohu që `Content-Type`-et janë të sakta, sepse tani shfletuesi do t'i besojë. Një skedar CSS i shërbyer si text/plain do të refuzohet.
  • Për skedarë të ngarkuar nga përdoruesit, shtoje edhe Content-Disposition: attachment dhe shërbeji nga një domain tjetër.
  • Verifiko me: ``sh curl -sI https://shembull.com | grep -i x-content-type ``

Si e mat ky mjet

SecurityAnalyzer::checkSecurityHeaders() (services/SecurityAnalyzer.php:90) kalon nëpër një tabelë me gjashtë koka (:92–99). Rreshti për këtë kokë është services/SecurityAnalyzer.php:96.

Për secilën kontrollohet vetëm nëse çelësi x-content-type-options ekziston te kokat e përgjigjes dhe nuk është bosh (:103). Kur ekziston, jepet konstatim i kaluar me vlerën e plotë të kokës (:105); kur mungon, jepet konstatim me tekstin e ndreqjes (:109).

Kjo kokë është në grupin e lehtë: mungesa e saj jep konstatim informativ me ndikim mesatar (services/SecurityAnalyzer.php:107).

Çfarë NUK e mat

Kontrolli mat praninë e kokës, jo vlerën e saj. Çdo vlerë, sado e dobët ose e pakuptimtë, kalon si e rregullt — kjo është kufizimi kryesor dhe vlen për të gjashtë kokat e sigurisë.

Për këtë kokë ekziston vetëm një vlerë e vlefshme, nosniff. Një vlerë e gabuar — X-Content-Type-Options: true ose on — nuk ka asnjë efekt te shfletuesi, por raportohet si kokë e vendosur dhe kontrolli kalon.

Matet vetëm përgjigja e dokumentit HTML. Përgjigjet ku kjo kokë ka rëndësinë më të madhe — skedarët e ngarkuar nga përdoruesit, pikat e API-t që kthejnë JSON — nuk kontrollohen fare, sepse mjeti nuk i kërkon.

Kodi që e kryen matjen

  • services/SecurityAnalyzer.php:90SecurityAnalyzer::checkSecurityHeaders
  • services/SecurityAnalyzer.php:96x-content-type-options

Standardi