Kalo te përmbajtja
SEO Analyzer

Siguri

Koka Content-Security-Policy

Politika që përcakton nga cilat burime lejohet kod dhe përmbajtje; mbrojtja kryesore kundër XSS.

Çfarë është

Content-Security-Policy është një listë rregullash që i thonë shfletuesit nga ku lejohet të vijë çdo lloj burimi: skripta, stile, imazhe, fonte, korniza, lidhje.

Parimi është ndryshim i parazgjedhjes. Pa CSP, shfletuesi ekzekuton çdo skript që gjen në faqe, nga kudo. Me CSP, ai ekzekuton vetëm atë që politika e lejon shprehimisht.

Kjo e kthen një sulm XSS nga "kod i huaj që xhiron" në "kërkesë e bllokuar dhe e raportuar". Sulmuesi mund ta fusë skriptin, por shfletuesi nuk e ekzekuton.

CSP-ja nuk është një rregull i vetëm por një grup direktivash, dhe fuqia e saj varet krejt nga sa e rreptë është.

Pse ka rëndësi

XSS mbetet një nga dobësitë më të shfrytëzuara në ueb, dhe pasojat e saj janë të plota: kodi i sulmuesit xhiron me të njëjtat të drejta si kodi yt. Ai lexon sesionin, ndryshon faqen, dërgon çdo gjë që shkruan përdoruesi.

Mbrojtja e zakonshme — shmangia e daljeve — është e domosdoshme por e brishtë: mjafton një vend i vetëm ku harrohet. CSP-ja është shtresa e dytë që e bën atë harresë jo fatale.

Ajo mbron edhe nga një rrezik i dytë që rritet: skriptet e palëve të treta. Një bibliotekë e komprometuar në një CDN mund të vjedhë të dhëna nga formulari yt i pagesës. Me connect-src të kufizuar, ajo nuk i dërgon dot askund.

Kostoja është reale: një CSP e rreptë kërkon që të mos ketë skripta dhe stile inline pa nonce. Kjo shpesh do të thotë rishkrim.

Si rregullohet

# fillimisht vetëm raporto, mos blloko asgjë
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-raport

# pastaj, politika e vërtetë
Content-Security-Policy:
  default-src 'self';
  script-src 'self' 'nonce-R4nd0m';
  style-src 'self' 'nonce-R4nd0m';
  img-src 'self' data:;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self'

Hapat:

  • Fillo me `Report-Only`. Mblidh raportet për një ose dy javë para se të bllokosh.
  • Shmang `unsafe-inline` dhe `unsafe-eval`. Me to, CSP-ja humb pjesën më të madhe të vlerës.
  • Përdor `nonce` të ri për çdo përgjigje, kurrë një vlerë të fiksuar.
  • `frame-ancestors 'none'` e zëvendëson X-Frame-Options me kontroll më të imët.
  • Mos harro `base-uri` dhe `form-action` — pa to, sulmuesi mund ta ridrejtojë formularin.

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:94.

Për secilën kontrollohet vetëm nëse çelësi content-security-policy 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 rëndë: mungesa e saj jep paralajmërim me ndikim të lartë (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 CSP-në pasoja është e madhe: një politikë si default-src *; script-src 'unsafe-inline' 'unsafe-eval' * — që praktikisht nuk ndalon asgjë — raportohet si kokë e vendosur dhe kontrolli kalon. Vlerësimi i vërtetë i një CSP-je kërkon analizë të çdo direktive, dhe ai nuk bëhet fare.

Nuk zbulohet as Content-Security-Policy-Report-Only, e cila nuk bllokon asgjë. Nuk lexohet as CSP e deklaruar me <meta http-equiv> — një faqe që e ka vendosur ashtu raportohet si pa politikë.

Kodi që e kryen matjen

  • services/SecurityAnalyzer.php:90SecurityAnalyzer::checkSecurityHeaders
  • services/SecurityAnalyzer.php:94content-security-policy

Standardi