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.
Hogyan mérjük
Szekció neve “Hogyan mérjük”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-Policyfejléc tartalmazza aframe-ancestorsszót, vagy vanX-Frame-Optionsfejlé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-ancestorsaz MDN szerint meta elemben nem támogatott, azX-Frame-Optionspedig 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 aframe-ancestors *.
Hogyan javítsd
Szekció neve “Hogyan javítsd”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.
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 X-Frame-Options "SAMEORIGIN" always;Apache (.htaccess)
Szekció neve “Apache (.htaccess)”<IfModule mod_headers.c> Header always set X-Frame-Options "SAMEORIGIN"</IfModule>Cloudflare
Szekció neve “Cloudflare”Rules → Overview → Create rule → Response Header Transform Rule:
Set static: X-Frame-Options = SAMEORIGINWordPress
Szekció neve “WordPress”Ú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.
<?phpadd_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.
Hogyan ellenőrizd
Szekció neve “Hogyan ellenőrizd”Futtasd újra a riportot. Parancssorbó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: