Tovább a tartalomhoz

Clickjacking-védelem

A teszt azt nézi, hogy az oldal tiltja-e a keretbe ágyazást X-Frame-Options fejléccel vagy CSP frame-ancestors irányelvvel; ha nem, állíts be egyet.

Clickjackingnél egy idegen oldal láthatatlan vagy elfedett keretben (<iframe>) tölti be az oldaladat, és ráveszi a látogatót, hogy a saját oldalán kattintva valójában nálad kattintson (például egy gombra vagy jóváhagyásra). A védelem egy válaszfejléc, amely megmondja a böngészőnek, ki ágyazhatja be az oldalt. A riportban a teszt súlyossága közepes.

A riport a főoldal válaszfejlécét nézi (átirányítások követése után a végső válaszét).

  • Megfelelő: a Content-Security-Policy fejléc tartalmazza a frame-ancestors szót, vagy van X-Frame-Options fejléc.
  • Hiba: egyik sincs.

Fontos részletek:

  • Csak a válaszfejlécet számolja. A meta tagben megadott CSP nem számít, mert a frame-ancestors az MDN szerint meta elemben nem támogatott, az X-Frame-Options pedig meta tagben szintén hatástalan.
  • A teszt csak a jelenlétet nézi, az értéket nem. Tehát megfelel egy hibás vagy túl laza érték is, például az elavult X-Frame-Options: ALLOW-FROM … (amelyet a mai böngészők teljesen figyelmen kívül hagynak, így nem véd), vagy a frame-ancestors *.

Az OWASP útmutatója szerint a fő védelem a CSP frame-ancestors irányelve, az X-Frame-Options pedig a régi böngészők tartaléka. Ha mindkettő jelen van, a frame-ancestors-t értő böngésző azt alkalmazza. A riport kártyája az X-Frame-Options: SAMEORIGIN fejlécet adja, ami azt engedi, hogy csak az oldal saját magát tegye keretbe.

Az X-Frame-Options két érvényes értéke: DENY (soha nem ágyazható be) és SAMEORIGIN (csak azonos eredetű oldal ágyazhatja be). Ha más oldal is beágyazhatja az oldaladat, a frame-ancestors irányelvvel sorolhatod fel őket, például frame-ancestors 'self' https://partner.example.com.

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 X-Frame-Options "SAMEORIGIN" always;
.htaccess
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>

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

Cloudflare
Set static: X-Frame-Options = SAMEORIGIN

Új fájlba: wp-content/mu-plugins/keretbe-agyazas-tiltasa.php (Bedrockon: web/app/mu-plugins/keretbe-agyazas-tiltasa.php). A WordPress send_frame_options_header() függvénye a dokumentáció szerint két fejlécet küld: X-Frame-Options: SAMEORIGIN és Content-Security-Policy: frame-ancestors 'self';, tehát mindkét védelmet beállítja.

keretbe-agyazas-tiltasa.php
<?php
add_action( 'send_headers', 'send_frame_options_header' );

Ha az oldalad a Content-Security-Policy alapszabályát is megkapja (abban szerepel a frame-ancestors 'self'), a clickjacking-teszt azzal is megfelel.

Futtasd újra a riportot. Parancssorból:

Terminál
curl -sI https://example.com/ | grep -iE "x-frame-options|content-security-policy"

Ellenőrizd azt is, hogy az oldal nem tört el ott, ahol szándékosan be van ágyazva (például egy partneroldalon).

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