Biztonság Szakszó

X-Frame-Options

Szerző: · 7 perc olvasás · Frissítve:
X-Frame-Options - Biztonság (szakszó) a tudástárban
X-Frame-Options - Biztonság | eClick GEO-audit tudástár

Az X-Frame-Options egy HTTP-válaszfejléc, amely megmondja a böngészőnek, hogy az oldalad betölthető-e iframe-be vagy frame-be. A célja a clickjacking elleni védelem: azt akadályozza meg, hogy valaki láthatatlan keretben az oldaladra ültesse a felhasználót, és így kattintsa vele végig a saját űrlapodat.

Hogyan működik

A szerver minden HTML-válasszal elküldi a fejlécet, a böngésző pedig betartja. Két értéke él ma a gyakorlatban:

  • DENY: semmilyen oldal nem ágyazhatja be, még te magad sem.
  • SAMEORIGIN: csak azonos eredetű (protokoll + domain + port) oldal ágyazhatja be.

Van egy harmadik, ALLOW-FROM értéke is, de azt a modern böngészők nem támogatják. Ha egyetlen konkrét külső domainnek akarsz beágyazást engedni, arra a CSP (Content-Security-Policy) frame-ancestors direktívája való.

Mi a viszonya a CSP-hez

Az X-Frame-Options a régebbi, egyszerűbb megoldás. A Content-Security-Policy: frame-ancestors ugyanezt tudja, csak rugalmasabban: több forrást is felsorolhatsz. Ha mindkettő jelen van, a modern böngészők a frame-ancestors értékét veszik figyelembe. A kettő együtt is kitehető, a régi böngészők miatt ez ma is bevett gyakorlat.

Mit jelent a keresőknek és az AI-nak

Sem a Google, sem az AI-crawlerek nem rangsorolnak közvetlenül az X-Frame-Options alapján. Ez nem rangsoroló tényező. Közvetve viszont számít: a hiányzó biztonsági fejlécek egy elhanyagolt üzemeltetés jelei, és a feltört oldal már nagyon is SEO-kérdés. A Weboldal-biztonság: a fejlécektől a feltörésig és a SEO-spam feltörés között szoros a kapcsolat. A legtöbb automata audit, a Lighthouse Best Practices (böngészős jó gyakorlatok) és a GEO-audit típusú vizsgálatok is nézik a fejléc meglétét.

Röviden: egy soros szerverbeállítás, ami megakadályozza, hogy az oldaladat idegen keretbe ültessék.

Miért fontos

Biztonsági következmény

Clickjacking-támadásnál a támadó átlátszó iframe-ben jeleníti meg az oldaladat. A felhasználó azt hiszi, egy nyereményjátékra kattint, valójában a te felületeden nyom meg egy gombot. Bejelentkezett munkamenettel ez komoly kár: jelszóváltoztatás, adatküldés, megrendelés.

A kockázat ott a legnagyobb, ahol van bejelentkezés vagy egykattintásos művelet. Webshop-kosár, admin-felület, banki jellegű funkció, ügyfélportál.

Üzleti és megfelelőségi következmény

A fejléc hiánya minden komolyabb biztonsági szkennerben megjelenik. Ha B2B-ben pályázol vagy nagyobb partnernek szállítasz, az ilyen listát előbb-utóbb eléd teszik. A riportokban ez az egyik leggyorsabban lezárható tétel: percek alatt javítható, és azonnal eltűnik a hibalistáról.

SEO-kapcsolat

Közvetlen hatása nincs. Közvetett annál inkább: a biztonsági HTTP-fejlécek hiánya általában együtt jár elavult PHP- és plugin-verziókkal. Ezek együtt vezetnek feltöréshez, az pedig index-szennyezéshez és manuális Google-büntetéshez.

Kikre vonatkozik

Kikre vonatkozik

  • Minden nyilvános weboldalra, amelynek van bejelentkezése vagy űrlapja.
  • Webshopokra kiemelten: a kosár és a pénztár egykattintásos műveletei a legvonzóbb célpontok.
  • Admin- és ügyfélfelületekre, ahol munkamenet-süti van.
  • Staging- és teszt-környezetekre is, ha publikusan elérhetők.

Kikre nem, vagy csak részben

  • Szándékosan beágyazható tartalomra: videólejátszó, widget, térkép-beágyazás, kalkulátor. Ezeknél a DENY tönkreteszi a funkciót.
  • Nem HTML-válaszokra: képekre, CSS-re, JSON API-ra a fejlécnek nincs értelme, bár nem okoz kárt.

Ha a saját oldaladat más domainre ágyazod ki (például egy partneroldalra), ne X-Frame-Options-t használj. Arra a CSP frame-ancestors a helyes eszköz.

Hogyan ellenőrzöd

Böngészőből

  1. Nyisd meg az oldalt, majd a devtools Network fülét (F12).
  2. Frissíts, és kattints a legelső, HTML-dokumentum kérésre.
  3. A Headers fülön nézd meg a Response Headers blokkot.
  4. Keresd az x-frame-options sort, illetve a content-security-policy értékében a frame-ancestors részt.

Parancssorból

curl -sI https://pelda.hu | grep -i -E 'x-frame-options|frame-ancestors'

A -I csak a fejléceket kéri le. Ha üres a válasz, egyik védelem sincs beállítva.

Jó jel

  • X-Frame-Options: SAMEORIGIN vagy DENY minden HTML-oldalon.
  • Vagy Content-Security-Policy: frame-ancestors 'self' (ez önmagában is elég).
  • A fejléc az aldomaineken és a www változaton is ott van.

Rossz jel

  • Nincs se X-Frame-Options, se frame-ancestors.
  • ALLOW-FROM https://valami.hu: a böngészők ezt figyelmen kívül hagyják, tehát nincs védelem.
  • Csak a főoldalon van kint, a belső oldalakon nincs.
  • Elgépelt érték (SAME-ORIGIN, SAMEORIGINE): a böngésző ilyenkor általában blokkol, vagy ignorál.

Mit néz ebből a riport

Az audit lekéri a kezdőoldal válaszfejléceit, és megnézi, van-e érvényes X-Frame-Options vagy frame-ancestors. Ha egyik sincs, hibaként jelzi. Az hatás általában közepes, mert a javítás olcsó, a kockázat viszont valós.

Hogyan javítod

WordPress

  1. Legegyszerűbb út: szerverszintű beállítás, ne plugin.
  2. Apache esetén az .htaccess fájlba tedd be a Header always set sort (lásd a kódpéldát).
  3. Nginx esetén a server blokkba kerül az add_header direktíva, utána nginx -t és újratöltés.
  4. Ha nincs szerver-hozzáférésed, biztonsági plugin (például Wordfence) vagy a send_headers hook is kiteszi.
  5. Ellenőrizd a Gutenberg-előnézetet és a beágyazott elemeket: a SAMEORIGIN ezeket nem töri el.

Shopify

A Shopify alapból küldi az X-Frame-Options: DENY fejlécet a bolt oldalaira, ezt nem tudod és nem is kell felülírni. Itt nincs teendőd. Ha mégis hiányt jelez egy szkenner, valószínűleg egy saját domainen futó landing oldalt mértél, nem a boltot.

Unas

A fejléceket a platform kezeli, nincs közvetlen szerver-hozzáférésed. Ha hiányt látsz, jelezd az ügyfélszolgálatnak. A saját sablonból HTML-lel nem tudod pótolni, a <meta> tag erre nem működik.

Shoprenter

Ugyanez a helyzet: a fejléc-beállítás szolgáltatói hatáskör. Nyiss hibajegyet, és kérd az X-Frame-Options: SAMEORIGIN beállítását. A hatókör itt egyértelműen a szolgáltatónál van.

Egyedi fejlesztés

  1. Döntsd el, kell-e bárkinek beágyaznia az oldalt. Ha nem, DENY.
  2. Ha a saját aldomainjeid ágyazzák be, SAMEORIGIN.
  3. Tedd ki mellé a Content-Security-Policy: frame-ancestors direktívát is.
  4. A fejlécet a reverse proxy vagy a webszerver szintjén állítsd be, ne az alkalmazásban. Így a statikus és hibaoldalak is megkapják.
  5. Ha CDN van előtte, ellenőrizd, hogy a CDN (tartalomszolgáltató hálózat) nem szűri ki a fejlécet a gyorsítótárazott válaszokból.
  6. Ha már itt tartasz, tedd ki egyszerre a X-Content-Type-Options, Referrer-Policy és HSTS (HTTP Strict Transport Security) fejléceket is.

Gyakori hibák

  • <meta http-equiv="X-Frame-Options"> a HTML-ben: a böngészők ezt figyelmen kívül hagyják, csak valódi HTTP-fejlécként működik.
  • ALLOW-FROM használata: egyetlen modern böngésző sem támogatja, tehát ilyenkor semmilyen védelem nincs.
  • Csak a főoldalon beállítva: a magyar KKV-oldalak többségén pont a bejelentkezés és a pénztár marad védtelen.
  • Ellentmondó fejléc és CSP: ha az X-Frame-Options DENY, a frame-ancestors meg 'self', a böngészők eltérően viselkedhetnek. Tartsd szinkronban a kettőt.
  • Kétszer kiküldött fejléc: a webszerver és az alkalmazás is kirakja, a duplikált érték nem várt blokkolást okoz.
  • Saját beágyazás eltörése: DENY-t állítasz, majd csodálkozol, hogy a fizetési iframe vagy az előnézet üres marad.
  • Plugin-alapú megoldás CDN mögött: a gyorsítótárazott válaszból kimarad a fejléc, és a mérés hiányt mutat.

Technikai példa

Apache-konfiguráció vagy .htaccess. Az always kulcsszó miatt a hibaoldalak (404, 500) is megkapják a fejlécet:

<IfModule mod_headers.c>
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Content-Security-Policy "frame-ancestors 'self'"
  Header always set X-Content-Type-Options "nosniff"
</IfModule>

Nginx server blokkban ugyanez. Figyelj rá, hogy ha egy location blokkban is van add_header, az felülírja a kintebbieket:

add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self'" always;

Ellenőrzés a beállítás után. A várt kimenet két sor:

curl -sI https://pelda.hu/bejelentkezes | grep -i -E 'x-frame|content-security'

Ha egy konkrét partnernek engedsz beágyazást, az X-Frame-Options nem elég. Ilyenkor csak a CSP marad:

Content-Security-Policy: frame-ancestors 'self' https://partner.hu

Gyakori kérdések

Ront-e a Google-rangsoromon, ha hiányzik az X-Frame-Options?
Közvetlenül nem. A Google nem használja rangsoroló jelként a biztonsági fejléceket. Közvetve viszont számít: a védtelen oldalak nagyobb eséllyel törnek fel, a feltörés pedig index-szennyezéshez és manuális büntetéshez vezet. Az automata auditok és a biztonsági szkennerek is hibaként jelzik.
A DENY vagy a SAMEORIGIN a jobb választás?
Ha az oldalt sehol nem ágyazod be, a DENY a szigorúbb és biztonságosabb. A legtöbb oldalon a SAMEORIGIN a praktikus alapérték, mert nem töri el a saját előnézeteket és beágyazásokat. Kezdd SAMEORIGIN-nal, és csak akkor szigoríts, ha ellenőrizted, hogy semmi nem használ iframe-et.
Ha már van CSP-m, kell még X-Frame-Options is?
Szigorúan véve nem. A frame-ancestors direktíva mindent tud, amit a régi fejléc, és a modern böngészők azt részesítik előnyben. Mégis bevett gyakorlat mindkettőt kitenni: a régi böngészők és sok biztonsági szkenner kifejezetten az X-Frame-Options sort keresi.
Beállíthatom HTML-ből, meta tagként?
Nem. Az X-Frame-Options kizárólag HTTP-válaszfejlécként működik, a <meta http-equiv> változatát a böngészők figyelmen kívül hagyják. Ha nincs szerver-hozzáférésed, a hosting vagy a platform ügyfélszolgálatához kell fordulnod.
Elrontja-e a Google Ads vagy a Facebook konverziómérést?
Nem. A fejléc csak azt szabályozza, hogy az oldalad más oldal keretébe betölthető-e. A mérőkódok, a Google Tag Manager és a pixelek ettől függetlenül futnak. Ha mégis eltörik valami, az szinte biztosan egy iframe-es beágyazás, nem a mérés.

Források

Kapcsolódó fogalmak

A te oldaladon hogy áll a(z) „X-Frame-Options”?

Futtass egy SEO-auditot: pontszám, fejlesztői ítélet, a leggyorsabb javítások, és minden tételhez bizonyíték.

Ingyenes SEO-audit indítása