Content-Security-Policy
A teszt azt nézi, hogy az oldal küld-e Content-Security-Policy fejlécet vagy meta taget; ha nem, állíts be legalább egy alap szabályt, és szigorítsd fokozatosan.
A Content-Security-Policy (CSP) megmondja a böngészőnek, honnan tölthet be az oldal szkriptet, stílust, képet és egyéb tartalmat, és mire használhatja a beágyazott elemeket. Fő célja a szkriptbefecskendezéses támadások (XSS) hatásának korlátozása: ha egy támadó mégis kódot juttat az oldalba, egy jól beállított CSP nem engedi lefutni vagy kommunikálni. Az MDN szerint a CSP nem helyettesíti a bemenet szűrését, hanem kiegészíti azt (mélységi védelem). A riportban a teszt súlyossága közepes.
Hogyan mérjük
Szekció neve “Hogyan mérjük”A riport a főoldal válaszát nézi (átirányítások követése után a végső válaszét).
- Megfelelő: van
Content-Security-Policyválaszfejléc nem üres értékkel, vagy a HTML-ben van<meta http-equiv="Content-Security-Policy">tag. - Hiba: egyik sincs.
A teszt csak a jelenlétet ellenőrzi, a szabály tartalmát nem értékeli: egy nagyon laza szabály is megfelel. A Content-Security-Policy-Report-Only fejlécet nem számítja be (az nem kényszerít ki semmit). A meta tagnál az MDN szerint nem minden CSP-funkció működik, ezért a fejléc a teljes értékű megoldás.
Hogyan javítsd
Szekció neve “Hogyan javítsd”Fokozatosan haladj, mert egy túl szigorú szabály eltöri az oldalt (letiltja a saját szkripteket, betűtípusokat, beágyazott videókat).
- Indulj egy kis kockázatú alapszabállyal (alább). Ez nem korlátozza a szkriptek és stílusok forrását, ezért az oldalt nem töri el, de így önmagában még nem védi meg az XSS-től.
- Szigorításhoz használd a jelentés módot. Az MDN és a Mozilla útmutatója is azt javasolja, hogy előbb
Content-Security-Policy-Report-Onlyfejlécben próbáld ki a szabályt: nem kényszeríti ki, csak jelenti a megsértéseket. A report-only szabály meta tagben nem adható meg, csak fejlécben. - Az XSS ellen a
script-srcad valódi védelmet. Az MDN a nonce- vagy hash-alapú szigorú CSP-t javasolja, és figyelmeztet, hogy az'unsafe-inline'és az'unsafe-eval'nagyrészt elveszi a CSP értelmét. Ehhez az oldal kódját is át kell alakítani (beágyazott szkriptek nonce-szal vagy hash-sel), ezért ez a feladat oldalanként más.
Az alábbi alapszabály három irányelvet tartalmaz:
object-src 'none': letiltja a<object>és<embed>elemeket (így a beágyazott PDF-et is),base-uri 'self': megakadályozza, hogy befecskendezett<base>tag átirányítsa a relatív címeket,frame-ancestors 'self': csak az oldal saját magát engedi keretbe tenni (ez egyben a clickjacking elleni védelmet is teljesíti).
Ha ezek bármelyikét szándékosan használod (például más oldalról keretbe teszik az oldaladat), előbb igazítsd a szabályt. Ha már van Content-Security-Policy fejléced, a meglévő szabályt egészítsd ki, ne küldj mellé másodikat.
nginx
Szekció neve “nginx”Az nginx server blokkjába. Ha egy location blokkban is van add_header, oda is be kell írni, mert az nginx csak akkor örökli a fejlécet, ha az adott szinten nincs add_header.
add_header Content-Security-Policy "object-src 'none'; base-uri 'self'; frame-ancestors 'self'" always;Apache (.htaccess)
Szekció neve “Apache (.htaccess)”<IfModule mod_headers.c> Header always set Content-Security-Policy "object-src 'none'; base-uri 'self'; frame-ancestors 'self'"</IfModule>Cloudflare
Szekció neve “Cloudflare”Rules → Overview → Create rule → Response Header Transform Rule:
Set static: Content-Security-Policy = object-src 'none'; base-uri 'self'; frame-ancestors 'self'Ha a válaszfejléchez nem férsz hozzá, a lap <head> részébe meta tag is tehető. Itt a frame-ancestors nem hat (az MDN szerint meta elemben nem támogatott), ezért nincs benne.
<meta http-equiv="Content-Security-Policy" content="object-src 'none'; base-uri 'self'">Hogyan ellenőrizd
Szekció neve “Hogyan ellenőrizd”Futtasd újra a riportot. Parancssorból:
curl -sI https://example.com/ | grep -i content-security-policyBöngészőben nyisd meg a fejlesztői eszközök konzolját: a CSP megsértéseit a böngésző ott is jelzi. Éles bevezetés előtt nézd végig az oldal fontos részeit (űrlapok, beágyazások, fizetés), hogy semmi nem tört el.
Készült: