Tovább a tartalomhoz

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.

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-Policy vá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.

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).

  1. 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.
  2. 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-Only fejlé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.
  3. Az XSS ellen a script-src ad 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.

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.

nginx
add_header Content-Security-Policy "object-src 'none'; base-uri 'self'; frame-ancestors 'self'" always;
.htaccess
<IfModule mod_headers.c>
Header always set Content-Security-Policy "object-src 'none'; base-uri 'self'; frame-ancestors 'self'"
</IfModule>

Rules → Overview → Create rule → Response Header Transform Rule:

Cloudflare
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.

HTML
<meta http-equiv="Content-Security-Policy" content="object-src 'none'; base-uri 'self'">

Futtasd újra a riportot. Parancssorból:

Terminál
curl -sI https://example.com/ | grep -i content-security-policy

Bö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:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások