Defaults.Exposed › Javítások › Kattintás-eltérítés elleni védelem (X-Frame-Options)
Hogyan javítsd ki: Kattintás-eltérítés elleni védelem (X-Frame-Options)
Egyetlen soros utasítás, amely megmondja a böngészőknek, hogy ne engedjék meg más webhelyeknek a te oldalad titkos betöltését a sajátjukba. Enélkül egy csaló elrejtheti az élő, bejelentkezett oldalaidat egy hamis oldal mögé, és ráveheti az ügyfeleidet, hogy olyasmire kattintsanak, amit soha nem szándékoztak – jóváhagyva egy fizetést, megváltoztatva egy jelszót, hozzáférést adva.
Az üzleted szempontjából lényeg: Egy csaló láthatatlanul körbeburkolhatja az élő webhelyedet egy hamissal, és pénzt vagy fiókhoz való hozzáférést lophat a bejelentkezett ügyfeleidtől – és az ügyfél szemszögéből úgy tűnik, hogy a te oldalad csinálta. A javítás ingyenes, és egy fejlesztőnek kb. 15 percet vesz igénybe; az elhagyása egy ismert rés, amelyet a bűnözők és az óvatos vevők egyaránt másodpercek alatt észrevesznek.
Mibe kerülhet ez neked
- Egy csaló elrejti az igazi bejelentkezési vagy fizetési képernyődet egy ártalmatlannak tűnő oldal mögé, és ráveszi az ügyfelet, hogy 'megerősítsen' egy átutalást vagy beállítás-módosítást anélkül, hogy rájönne – az ügyfél téged hibáztat, nem a támadót.
- A bejelentkezett fiókterületed láthatatlanul tölt egy 'Nyertél – kattints az igényléshez' oldal tetejére; a kattintás valójában jóváhagy egy valódi változtatást az ügyfél fiókján nálad, és te fogadod a dühös ügyfélszolgálati hívást.
- Egy lehetséges vevő IT-csapata gyors biztonsági vizsgálatot futtat az aláírás előtt, látja, hogy az oldaladat bárki beágyazhatja, és kockázatként jelöli meg, amely megállítja vagy megöli az üzletet.
- A márkád egy csalás kampány csalijaként szerepel; az odavonzott ügyfelek emlékezni fognak rá, mint 'az a cég, amelynek oldala lehetővé tette'.
- Egy auditor vagy kibervédelmi biztosítási vizsgálat a hiányzó kattintás-eltérítési védelmet alapvető higiéniai hibának sorolja fel – olcsó a javítás, kínos, hogy megjelölték.
Miért fontos. Ez egy ingyenes, egysoros beállítás, amelynek hozzáadása perceket vesz igénybe, és teljes egész taktikai becsapás osztályt zár le a bejelentkezett ügyfeleid ellen. A pontozásunkban ez egy valódi-pontokat érő webbiztonsági ellenőrzés, magas súlyossággal, mert egy hiányzó fejléc könnyen ellenőrizhető, ismert lyukat hagy, amelyet a bűnözők automatizálnak és a vevők keresnek.
Mi ez egyszerű szavakkal
Amikor valaki meglátogatja a weboldaladat, a böngészőjük azt is utasíthatja, hogy töltse be a weboldaladat egy másik webhelyen belül – mint egy kis ablak beágyazva egy nagyobb oldalba. Ez ártalmatlannak hangzik, és néha az is. De ez az a mechanizmus, amely mögött a kattintás-eltérítés (clickjacking) nevű támadás áll.
Íme a trükk. Egy csaló megépíti a saját oldalát, és csendesen betölti a valódi weboldaladat benne – láthatatlanul, teljesen átlátszóvá téve. Majd a saját tartalmát rakja felülre: egy mutatós gombot, egy ‘Videó lejátszása’ gombot, egy ‘Igényelje a díját’ feliratot. Az ügyfeled látja a támadó oldalát, és arra kattint, ami ártatlan gombnak tűnik. De mivel az igazi oldalad láthatatlanul ül a kurzor alatt, a kattintás valójában az oldaladra kerül – megerősíti egy fizetést, megváltoztat egy jelszót, jóváhagy egy hozzáférést, elfogad egy engedélyt. Az ügyfél azt hiszi, egy dologra kattintott; valójában másra kattintott, egy olyan oldalon, amelyben megbízik.
A kattintás-eltérítési védelem egy rövid, láthatatlan utasítás, amelyet a webhelyed minden látogató böngészőjének küld, amelynek lényege:
„Ne engedd más webhelyeknek, hogy betöltsenek a sajátjukba. Ha valaki megpróbálja, utasítsd el.”
A modern böngészők automatikusan engedelmeskednek. Amint be van kapcsolva, a trükk egyszerűen nem működik – az oldalad beágyazott másolata megtagadja a betöltést. Enélkül az oldalad szabad préda arra, hogy egy átverésben rejtett rétegként használják, és az ügyfél, aki belefut, az egészet a márkáddal fogja társítani, nem a támadóéval.
Mibe kerülhet ez neked
Ezek valós, mindennapi forgatókönyvek. Sosem nevesítünk valódi vállalkozást; ezek illusztrációi a rés kihasználásának.
-
A láthatatlan ‘megerősítés’. Egy ügyfél be van jelentkezve a fiókportálodba az egyik fülön. Egy oldalra landolnak (egy hirdetésből, e-mailből, keresési eredményből), amely valami csábítót ígér, és egy nagy ‘Folytatás’ gombot mutat. E gomb alatt az igazi ‘Átutalás megerősítése’ vagy ‘E-mail módosítása’ vezérlő van rejtve, betöltve a saját bejelentkezett munkamenetükből. A ‘Folytatás’-ra kattintanak – és véletlenül felhatalmaznak egy valódi változtatást a tényleges fiókjukon nálad. Nekik és az ügyfélszolgálati csapatodnak úgy tűnik, mintha ők csinálták az oldaladon.
-
A beállítás-elrablás. Egy támadó bekeretezel a fiókbeállítási oldalad, és egy ártatlan játékot vagy felmérést ültet rá. Néhány kattintás a megfelelő helyeken csendben megváltoztat egy beállítást – hozzáadja a támadó e-mailcímét helyreállítási címként, engedélyt ad egy alkalmazásnak, vagy letilt egy biztonsági riasztást. A fiók mostantól csendben kompromittált, és semmi sem tűnt rossznak annak idején.
-
Az elakadt üzlet. Egy nagyobb ügyfél az aláírás előtt elküldi a szokásos biztonsági kérdőívet. Az egyik sor megkérdezi, hogy a webhely beállít-e kattintás-eltérítés elleni védelmet (X-Frame-Options / CSP frame-ancestors). Az IT-kapcsolatodnak ‘nem’ választ kell adnia, és a beszerzési folyamat megáll, amíg rohanva javítasz egy ingyenes, 15 perces beállítást.
-
A márkánk mint csali kampány. Mivel az igazi, megbízott oldalaid beágyazhatók, egy támadó az igazi bejelentkezési vagy pénztáradat használja meggyőző rétegként egy szélesebb adathalász kampányban. Az odavonzott ügyfelek nem a homályos támadót hibáztatják – emlékezni fognak rá, mint arra az alkalomra, amikor ‘az oldalad’ beengedte, hogy átejtsék őket.
-
Az audit megjelölése. Egy biztosítói vizsgálat, vagy egy auditor a biztonsági helyzetről, a hiányzó kattintás-eltérítési védelmet megállapítások között sorolja fel. Tipikus alapvető higiéniai tétel; ott szerepelni jelzi, hogy az egyszerű, ingyenes védelmi megoldások nem voltak érvényes – ami befolyásolja, hogyan ítélik meg a többi biztonsági megoldásodat.
Az összefüggő szál: a kár egy valódi, bejelentkezett ügyfélre hull, aki valami olyasmit tesz, amit nem szándékoztak – és a te nevedet viseli, nem a támadóét.
Mi is ez pontosan
Amikor egy böngésző oldalt kér a webhelyedtől, a szervered visszaküldi az oldalt néhány láthatatlan ‘fejléccel’. A kattintás-eltérítési védelem ezeken a fejléceken keresztül kerül kézbesítésre. Két lehetőség van, és az ellenőrzésünk megfelel, ha bármelyik jelen van:
1. A régebbi fejléc – X-Frame-Options:
X-Frame-Options: SAMEORIGIN
Ez a hosszú ideje fennálló, széles körben támogatott vezérlő. Két praktikus értéket vesz fel:
SAMEORIGIN– a saját oldalad beágyazhatja a saját oldalait, de külső webhely nem. A biztonságos alapértelmezett szinte mindenkinek.DENY– senki sem ágyazhatja be az oldalaidat, beleértve téged. Ezt csak akkor használd, ha az oldalad soha nem keretezi a saját tartalmát.
2. A modern fejléc – Content-Security-Policy frame-ancestors:
Content-Security-Policy: frame-ancestors 'self';
Ez az újabb, rugalmasabb vezérlő, amelyre a jelenlegi szabványok mutatnak. Ugyanazt a munkát végzi, de lehetővé teszi, hogy pontosan meghatározd, ki ágyazhatja be:
frame-ancestors 'self'– egyenértékű aSAMEORIGIN-nal.frame-ancestors 'none'– egyenértékű aDENY-val.frame-ancestors 'self' https://partner.example.com– a saját oldalad plusz egy megnevezett, megbízott partner, és senki más.
Mit jelent a „jó” beállítás
A legerősebb beállítás mindkettőt használja: a frame-ancestors-t a modern böngészőkhöz, és az X-Frame-Options: SAMEORIGIN-t tartalékként a régebbi ügyfelek számára. Az ellenőrzésünk megelégszik bármelyikkel önmagában – de mivel mindkettő ingyenes, és ugyanolyan néhány percbe kerül, nincs ok arra, hogy ne állítsuk be mindkettőt.
Egy fontos részlet, amelyet a fejlesztődnek tudnia kell: egy Content-Security-Policy-Report-Only fejléc nem kényszerít semmit – csak jelentést tesz. Ha azt akarod, hogy a kattintás-eltérítési védelem ténylegesen érvényes legyen, egy kényszerítő fejlécből kell érkeznie (normál Content-Security-Policy frame-ancestors-szel, vagy X-Frame-Options), nem egy report-only-ból.
Hogyan javítsd ki (ingyenes, ~15 perc)
Add ezt a részt annak, aki a weboldaladat kezeli – az IT-személyednek, webfejlesztőnek vagy tárhely ügyfélszolgálatnak. A javítás ingyenes. Egy-két válasz fejléc, vagy egy szabály a CDN-edben. Nincs mit venni.
Az ellenőrzés megfelel, ha vagy egy X-Frame-Options fejléc (DENY vagy SAMEORIGIN értékkel) vagy egy CSP frame-ancestors direktíva jelen van. Az ajánlott kötőfék-és-gombpánt beállítás mindkettőt hozzáadja.
1. lépés – Döntsd el, mennyire szigorú leszel
- Legtöbb vállalkozás:
SAMEORIGIN/frame-ancestors 'self'. A saját oldalad tovább működik; a külső webhelyek blokkolva. - Ha az oldalad soha nem ágyazza be a saját oldalait:
DENY/frame-ancestors 'none'a maximális zároláshoz. - Ha egy valódi partnernek egy adott oldaladat be kell ágyaznia: nevesítsd őket explicit módon a
frame-ancestors 'self' https://partner.example.com;segítségével, és senki más nem fér be.
2. lépés – Add hozzá a fejléceket (válaszd ki a platformot)
Nginx – a server blokkon belül:
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self';" always;
Apache – ügyelj arra, hogy a mod_headers engedélyezve van, majd a virtuális hosztban:
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self';"
Microsoft IIS – a web.config-ban az <customHeaders> belül:
<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="Content-Security-Policy" value="frame-ancestors 'self';" />
Cloudflare (vagy hasonló CDN): menj a Rules → Transform Rules → Modify Response Header részbe, és adj hozzá két szabályt, amelyek az X-Frame-Options-t SAMEORIGIN-ra és a Content-Security-Policy-t frame-ancestors 'self';-re állítják az összes választ. Ez a legkönnyebb út, ha nincs közvetlen szerverhozzáférésed.
Már küldesz Content-Security-Policy-t más okokból? Ne hozz létre egy második CSP fejlécet – add a frame-ancestors-t a meglévő politikádhoz. Két CSP fejléc ütközhet.
Weboldal-builderek (Squarespace, Wix, Shopify és hasonlók): ezek a platformok sokszor beállítják a kattintás-eltérítési védelmet neked, tehát lehet, hogy már megfelelsz anélkül, hogy bármit kellene tenned. Ha az ellenőrzésünk megjelöli, a vezérlő általában a platform biztonsági beállításaiban van, vagy hozzáadod az oldal előtt lévő CDN-nél.
3. lépés – Töltsd újra és ellenőrizd
Töltsd újra a webszervert vagy helyezd üzembe a CDN szabályt, majd töltsd be az élő oldaladat, és ellenőrizd a válasz fejléceket – böngésző fejlesztői eszközök → Hálózat fül → kattints az oldalkérésre → Válasz fejlécek, vagy bármely ingyenes fejléc-ellenőrző eszköz. Erősítsd meg, hogy a fejléc(ek) valódi oldal-válaszokon jelennek meg, nem csak a kezdőoldalon. Majd futtasd újra az ellenőrzést.
Általános hibák
- Report-only CSP használata, feltételezve, hogy védve vagy. A
Content-Security-Policy-Report-Onlycsak jelent megsértéseket – semmit sem kényszerít. Kényszerítő fejléc kell, hogy a védelem érvényes legyen. - Két külön
Content-Security-Policyfejléc beállítása. Ha már van CSP-d, add hozzá aframe-ancestors-t ahhoz, ahelyett, hogy egy második politikát bocsátanál ki; az ütköző CSP fejlécek váratlan viselkedést okozhatnak. DENYbeállítása, ha a saját oldalad beágyazza a saját oldalait. ADENYaz összes keretet blokkolja, beleértve a sajátodat. Ha az oldal bármely része saját iframeket használ, használjSAMEORIGIN-t /frame-ancestors 'self'-et helyette, különben tönkreteszed a saját oldalaidat.- Csak a kezdőoldal védelme. A kattintás-eltérítésnél leginkább fontos oldalak a bejelentkezett oldalak – fiókbeállítások, fizetés megerősítése, admin. Ügyelj arra, hogy a fejlécek site-szinten kerülnek alkalmazásra, nem csak az elülső oldalra.
- A HTTPS vagy a lakat már fedezetnek feltételezése. A titkosítás és a keret-ellenes védelem nem kapcsolódnak egymáshoz. Egy tökéletes tanúsítvány semmit sem akadályoz meg az oldalaid beágyazásában.
- Régi megoldásokra támaszkodás. A ‘frame-busting’ JavaScript (szkriptek, amelyek megpróbálnak kilépni a keretekből) megbízhatatlan és megkerülhető. A fejlécek a helyes, böngésző által érvényesített javítás.
GYIK
Nem vagyok technikai beállítottságú – meg tudom magam oldani ezt?
Nem kell elvégezned a technikai részt. Egyetlen beállítás, amelyet a webszerver vagy a CDN-ed ad hozzá, és bármely webfejlesztő vagy IT-szolgáltató néhány perc alatt hozzáadhatja. Add át nekik az alábbi 'Hogyan javítsd ki' részt – megmondja pontosan, mit kell hozzáadni. A javítás ingyenes; mi csak akkor számítunk fel díjat, ha azt szeretnéd, hogy folyamatosan figyeljük, hogy érvényes marad-e.
Ez tönkreteheti-e a saját oldalamat, vagy a legitim partnerek az oldalaim megjelenítésétől?
Csak ha túl szigorúan állítod be. A közös beállítás ('SAMEORIGIN', vagy 'frame-ancestors self') még mindig lehetővé teszi a saját webhelyednek, hogy normálisan beágyazza a saját oldalait – csak a külső webhelyeket blokkolja. Ha egy valódi partner az egyik adott oldaladat kell, hogy beágyazza, a fejlesztőd engedélyezheti azt az egyet, miközben mindenki mást blokkol.
Kis vállalkozás vagyunk – tényleg bajlódna valaki azzal, hogy minket célba vegyen?
Ezeket a támadásokat tömeges, automatizált eszközökkel futtatják, nem kézzel kiválasztva. A kisebb oldalakat sokszor pontosan azért érik el, mert hiányoznak belőlük az ilyen alapvető védelmi megoldások. A támadónak nem kell tudnia, ki vagy – csak azt kell, hogy az oldalad beágyazható legyen. A rés bezárása semmibe sem kerül neked.
Mi minősül 'jónak' valójában?
Vagy egy X-Frame-Options fejléc SAMEORIGIN-re (vagy DENY-ra) állítva, vagy egy Content-Security-Policy frame-ancestors direktívával – ideálisan mindkettő. Az ellenőrzésünk megfelel, ha bármelyik jelen van. A modern, rugalmasabb vezérlő a frame-ancestors; az X-Frame-Options a régebbi fejléc, amely még mindig lefedte egyes régi böngészőket, tehát a kötőfék-és-gombpánt beállítás mindkettőt használja.
Ez ugyanolyan, mint az SSL lakat vagy a HTTPS?
Nem – egészen különböző dolgok ellen védenek. A HTTPS titkosítja a kapcsolatot, hogy senki ne olvashassa átvitel közben. A kattintás-eltérítési védelem megakadályozza, hogy az oldalaidat valaki más oldalán belül töltsék be egyáltalán. Tökéletes lakatod lehet, és mégis teljesen nyitva állhatsz a kattintás-eltérítésre. Ezek külön ellenőrzések, és mindkettőt akarod.
Ha nem javítjuk, csökkenti-e a besorolásunkat?
Igen. Ez egy pontozásos webbiztonsági ellenőrzés, nem tájékoztató – egy hiányzó fejléc pontokat kerül, és magas súlyosságúnak minősül, mert közvetlenül teszi ki a bejelentkezett ügyfeleidet a csalásnak. Ez az egyik legolcsóbban visszaszerezhető pont: egyetlen ingyenes fejléc, kb. 15 perces fejlesztői munka.