Defaults.Exposed › Opravy › Ochrana proti clickjackingu (X-Frame-Options)
Jak opravit Ochrana proti clickjackingu (X-Frame-Options)
Jednořádková instrukce, která říká prohlížečům, aby nenechaly jiné weby tajně načíst váš web uvnitř svého vlastního. Bez ní může podvodník skrýt vaše skutečné, přihlášené stránky za falešnou stránku a přimět vaše zákazníky kliknout na věci, které nikdy neměli v úmyslu — schválení platby, změnu hesla, udělení přístupu.
Výsledek pro vaše podnikání: Podvodník může neviditelně obalit váš živý web do falešného a ukrást peníze nebo přístup k účtu od vašich přihlášených zákazníků — a zákazníkovi to vypadá, jako by to udělal váš web. Oprava je zdarma a vývojáři trvá asi 15 minut; nechat ji vypnutou je známá mezera, kterou jak zločinci, tak opatrní kupující mohou okamžitě najít.
Co vás to může stát
- Podvodník skryje váš skutečný přihlašovací nebo platební formulář za nevinně vypadající stránku a přiměje zákazníka 'potvrdit' převod nebo změnu nastavení bez toho, aby si to uvědomil — zákazník viní vás, ne útočníka.
- Váš přihlášený prostor pro správu účtu je neviditelně načten přes stránku 'Vyhráli jste — klikněte pro získání'; kliknutí skutečně schválí změnu na zákazníkově reálném účtu u vás a vy vyřizujete rozzlobený hovor podpory.
- IT tým potenciálního klienta spustí rychlý bezpečnostní sken před podpisem, uvidí, že váš web může být vložen kýmkoliv, a označí ho jako riziko, které zastavuje nebo zabíjí obchod.
- Vaše značka se stane návnadou v podvodné kampani; zákazníci, kteří se chytí, si to pamatují jako 'firmu, jejíž web to umožnil.'
- Auditor nebo sken kybernetického pojištění uvede chybějící ochranu proti clickjackingu jako základní selhání hygieny — levné opravit, trapné mít označené.
Proč na tom záleží. Toto je bezplatné, jednořádkové nastavení, které trvá minuty k přidání a zastaví celou třídu triků namířených na vaše přihlášené zákazníky. V našem hodnocení je to hodnocená kontrola webové bezpečnosti s reálnými body a vysokou závažností, protože chybějící hlavička zanechává známou, snadno kontrolovatelnou mezeru, kterou zločinci automatizují a kupující hledají.
Co to je, prostými slovy
Když někdo navštíví váš web, prohlížeč může být také instruován načíst váš web uvnitř jiného webu — jako malé okno vložené do větší stránky. Zní to nevinně, a někdy to tak je. Ale je to mechanismus za útokem zvaným clickjacking.
Zde je trik. Podvodník postaví vlastní stránku a tiše načte váš skutečný web uvnitř — neviditelně, zcela průhledný. Pak na to překryje vlastní obsah: okázalé tlačítko, “Přehrát video,” “Nárokujte svou výhru.” Váš zákazník vidí stránku útočníka a klikne na to, co vypadá jako nevinné tlačítko. Ale protože váš skutečný web sedí neviditelně pod jejich kurzorem, kliknutí skutečně přistane na vaší stránce — potvrzení platby, změna hesla, schválení přístupu, přijetí povolení. Zákazník si myslí, že klikl na jednu věc; skutečně klikl na jinou, na webu, kterému důvěřuje.
Ochrana proti clickjackingu je krátká, neviditelná instrukce, kterou váš web posílá prohlížeči každého návštěvníka, která říká v podstatě:
“Nenechte jiné weby mě načíst uvnitř nich. Pokud to někdo zkusí, odmítněte.”
Moderní prohlížeče to automaticky poslechnou. Pokud je zapnuto, trik prostě nefunguje — vložená kopie vašeho webu odmítne načíst. Bez toho je váš web fair game k použití jako skrytá vrstva v podvodu a zákazník, který se chytí, bude celou věc spojovat s vaší značkou, ne s útočníkovou.
Co vás to může stát
Toto jsou realistické, každodenní scénáře. Nikdy nejmenujeme skutečnou firmu; jde o ilustrace toho, jak je mezera využívána.
-
Neviditelné ‘potvrzení’. Zákazník je přihlášen do vašeho portálu účtu na jedné kartě. Přistanou na stránce (z reklamy, e-mailu, výsledku vyhledávání), která slibuje něco lákavého a zobrazuje velké tlačítko “Pokračovat.” Skryto pod tím tlačítkem je váš skutečný ovládací prvek “Potvrdit převod” nebo “Změnit e-mail,” načtený z jejich vlastní přihlášené relace. Kliknou na “Pokračovat” — a nevědomky potvrdí změnu na jejich skutečném účtu u vás. Pro ně i pro váš tým podpory to vypadá, jako by to oni udělali na vašem webu.
-
Únos nastavení. Útočník zarámuje stránku nastavení vašeho účtu a překryje ji nevinnou hrou nebo průzkumem. Pár kliknutí na správných místech tiše přepne nastavení — přidání e-mailu útočníka jako záložní adresy, udělení oprávnění aplikaci nebo deaktivace bezpečnostního upozornění. Účet je nyní tiše kompromitován a v té době nevypadalo nic špatně.
-
Obchod, který stagnuje. Větší zákazník pošle jejich standardní bezpečnostní dotazník před podpisem. Jeden řádek se ptá, zda váš web nastavuje ochranu proti zarámování (X-Frame-Options / CSP frame-ancestors). Váš IT kontakt musí odpovědět “ne” a nákupní proces se pozastavuje, zatímco spěcháte opravit bezplatné, 15minutové nastavení, které nyní vypadá jako červený příznak před kupujícím.
-
Značka jako návnada. Protože vaše skutečné, důvěryhodné stránky mohou být vloženy, útočník použije vaše přihlášení nebo pokladnu jako přesvědčivou vrstvu v širší phishingové kampani. Zákazníci, kteří se chytí, neviní temného útočníka — pamatují si to jako dobu, kdy “váš web” jim umožnil být podvedeni.
-
Příznak auditu. Sken pojistitele nebo auditor kontrolující vaši bezpečnostní pozici uvede chybějící ochranu proti clickjackingu mezi nálezy. Je to učebnicová položka základní hygieny; mít ji označenou signalizuje, že snadné, bezplatné ochrany nebyly na místě — což ovlivní, jak je posuzována zbývající část vašeho zabezpečení.
Společná nit: škoda dopadá na skutečného, přihlášeného zákazníka, který dělá něco, co nikdy neměl v úmyslu — a nese vaše jméno, ne útočníkovo.
Co to vlastně je
Když prohlížeč požádá váš web o stránku, váš server pošle stránku zpět plus několik neviditelných “hlaviček” — extra instrukce, které prohlížeč čte, ale návštěvník nikdy nevidí. Ochrana proti clickjackingu je doručena prostřednictvím těchto hlaviček. Existují dvě a naše kontrola projde, pokud je přítomna jedna z nich:
1. Starší hlavička — X-Frame-Options:
X-Frame-Options: SAMEORIGIN
Toto je dlouhotrvající, široce podporovaný ovládací prvek. Má dvě praktické hodnoty:
SAMEORIGIN— váš vlastní web může vkládat vlastní stránky, ale žádný cizí web nemůže. Bezpečné výchozí nastavení pro téměř všechny.DENY— nikdo nemůže vkládat vaše stránky, včetně vás. Použijte to pouze pokud váš web nikdy nezarámovává vlastní obsah.
2. Moderní hlavička — Content-Security-Policy frame-ancestors:
Content-Security-Policy: frame-ancestors 'self';
Toto je novější, flexibilnější ovládací prvek, na který poukazují současné standardy. Dělá stejnou práci, ale umožňuje být přesný ohledně toho, kdo vás může vložit:
frame-ancestors 'self'— ekvivalentSAMEORIGIN.frame-ancestors 'none'— ekvivalentDENY.frame-ancestors 'self' https://partner.example.com— váš vlastní web plus jeden pojmenovaný, důvěryhodný partner a nikdo jiný.
Jak vypadá ‘dobré’
Nejsilnější nastavení používá obojí: frame-ancestors pro moderní prohlížeče (a pro přesnost pojmenování povolených vkladatelů) a X-Frame-Options: SAMEORIGIN jako zálohu pro starší klienty. Naše kontrola je spokojena s kteroukoli z nich samotnou — ale protože obojí je zdarma a trvá stejných pár minut, není důvod nenastavit obojí.
Jeden důležitý detail, který by měl vědět váš vývojář: Content-Security-Policy-Report-Only hlavička nic nevynucuje — pouze hlásí. Pokud chcete, aby ochrana proti clickjackingu skutečně platila, musí pocházet z vynucovací hlavičky (normální Content-Security-Policy s frame-ancestors, nebo X-Frame-Options), nikoli z pouze hlásit.
Jak to opravit (zdarma, ~15 minut)
Předejte tuto část tomu, kdo provozuje váš web — vašemu IT pracovníkovi, webovému vývojáři nebo podpoře hostingu. Oprava je zdarma. Je to jedna nebo dvě hlavičky odpovědi nebo pravidlo ve vašem CDN. Není nic k nákupu.
Kontrola projde, když je přítomna buď hlavička X-Frame-Options (nastavená na DENY nebo SAMEORIGIN) nebo CSP direktiva frame-ancestors. Doporučené nastavení kšanda a řemen přidá obojí.
Krok 1 — Rozhodněte, jak přísní chcete být
- Většina podniků:
SAMEORIGIN/frame-ancestors 'self'. Váš vlastní web funguje; cizinci jsou blokováni. - Pokud váš web nikdy nevkládá vlastní stránky:
DENY/frame-ancestors 'none'pro maximální zablokování. - Pokud skutečný partner musí vložit konkrétní stránku: pojmenujte ho explicitně s
frame-ancestors 'self' https://partner.example.com;a nikomu jinému vstup neumožněte.
Krok 2 — Přidejte hlavičky (vyberte svou platformu)
Nginx — uvnitř vašeho bloku server:
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self';" always;
Apache — ujistěte se, že je povoleno mod_headers, pak ve virtuálním hostiteli:
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self';"
Microsoft IIS — v web.config uvnitř <customHeaders>:
<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="Content-Security-Policy" value="frame-ancestors 'self';" />
Cloudflare (nebo podobné CDN): přejděte na Pravidla → Transformační pravidla → Upravit hlavičku odpovědi a přidejte dvě pravidla, která nastavují X-Frame-Options na SAMEORIGIN a Content-Security-Policy na frame-ancestors 'self'; na všech odpovědích. Toto je nejjednodušší cesta, pokud nemáte přímý přístup k serveru.
Již odesíláte Content-Security-Policy z jiných důvodů? Nevytvářejte druhou CSP hlavičku — přidejte frame-ancestors do vaší stávající politiky. Dvě CSP hlavičky mohou být v konfliktu.
Tvůrci webů (Squarespace, Wix, Shopify a podobní): tyto platformy often nastavují ochranu proti zarámování za vás, takže možná již procházíte bez ničeho k udělání. Pokud naše kontrola označí problém, ovládací prvek je obvykle v nastavení zabezpečení platformy nebo ho přidáte na CDN před webem. (Poznámka: Google Workspace a Microsoft 365 pohání váš e-mail, nikoli váš web — tato hlavička se nastavuje kdekoliv váš veřejný web skutečně žije, nikoli v administrátorské konzoli Workspace/365.)
Krok 3 — Znovu načtěte a ověřte
Znovu načtěte webový server nebo nasaďte pravidlo CDN, pak načtěte živý web a zkontrolujte hlavičky odpovědi — vývojářské nástroje prohlížeče → karta Síť → klikněte na požadavek stránky → Hlavičky odpovědi, nebo jakýkoliv bezplatný nástroj pro kontrolu hlaviček. Potvrďte, že hlavičky se zobrazují na skutečných odpovědích stránek, nejen na domovské stránce. Pak znovu spusťte kontrolu.
Běžné chyby
- Použití pouze hlásit CSP a předpokládat, že vás chrání.
Content-Security-Policy-Report-Onlypouze hlásí porušení — nic nevynucuje. Pro platnost ochrany potřebujete vynucovací hlavičku. - Nastavení dvou samostatných hlaviček
Content-Security-Policy. Pokud již máte CSP, přidejteframe-ancestorsdo ní spíše než odesílání druhé politiky; konfliktní CSP hlavičky mohou způsobit neočekávané chování. - Nastavení
DENY, když váš vlastní web vkládá vlastní stránky.DENYblokuje veškeré zarámování, včetně vašeho vlastního. Pokud jakákoliv část vašeho webu používá iframy sebe samého, použijteSAMEORIGIN/frame-ancestors 'self'místo toho, nebo si rozbijete vlastní stránky. - Ochrana pouze domovské stránky. Stránky, na kterých nejvíce záleží pro clickjacking, jsou ty přihlášené — nastavení účtu, potvrzení platby, administrace. Ujistěte se, že hlavičky jsou aplikovány na celý web, nejen na přední stránku.
- Předpokládání, že HTTPS nebo zámek to již pokrývá. Šifrování a ochrana proti zarámování jsou nesouvisející. Dokonalý certifikát nedělá nic pro zabránění vložení vašich stránek.
- Spoléhání na staré náhradní řešení. “Frame-busting” JavaScript (skripty, které se snaží vyskočit z rámů) je nespolehlivý a lze ho obejít. Hlavičky jsou správná, prohlížečem vynucená oprava.
Časté dotazy
Nejsem technik — mohu to vyřešit sám?
Technickou část dělat nemusíte. Je to jedno nastavení přidané na server vašeho webu nebo CDN a každý webový vývojář nebo IT dodavatel ho může přidat za pár minut. Předejte jim sekci 'Jak to opravit' níže — říká jim přesně, co přidat. Oprava je zdarma; účtujeme pouze pokud byste chtěli, abychom sledovali, že zůstane na místě.
Zastaví to vlastní web nebo legitimní partnery v zobrazování mých stránek?
Pouze pokud to nastavíte příliš přísně. Běžné nastavení ('SAMEORIGIN' nebo 'frame-ancestors self') stále umožňuje vašemu vlastnímu webu normálně vkládat vlastní stránky — blokuje pouze cizí weby. Pokud potřebuje skutečný partner vložit jednu konkrétní stránku vašeho webu, váš vývojář může povolit tento jediný zdroj a přitom stále blokovat všechny ostatní.
Jsme malá firma — dalo by si někdo vůbec tu práci s cílením na nás?
Tyto útoky jsou prováděny hromadně automatizovanými nástroji, ne ručně vybíranými. Menší weby jsou často zasaženy právě proto, že postrádají základní ochrany jako tuto. Útočník nepotřebuje vědět, kdo jste — potřebuje jen, aby váš web šel vložit. Uzavření mezery vás nestojí nic.
Jak 'dobré' nastavení vlastně vypadá?
Buď hlavička X-Frame-Options nastavená na SAMEORIGIN (nebo DENY), nebo Content-Security-Policy s direktivou frame-ancestors — ideálně obojí. Naše kontrola prochází, pokud je přítomna jedna z nich. Moderní, flexibilnější kontrolou je frame-ancestors; X-Frame-Options je starší hlavička, která stále pokrývá některé starší prohlížeče, takže nastavení kšanda a řemen používá obojí.
Není to totéž jako SSL zámek nebo HTTPS?
Ne — chrání zcela různé věci. HTTPS šifruje připojení, aby ho nikdo nemohl číst při přenosu. Ochrana proti clickjackingu zastaví načítání vašich stránek uvnitř webu jiné osoby. Můžete mít dokonalý zámek a přesto být zcela otevřeni clickjackingu. Jsou to samostatné kontroly a chcete obojí.
Pokud to neopravíme, sníží to naše hodnocení?
Ano. Toto je hodnocená kontrola webové bezpečnosti, nikoli informativní — chybějící hlavička stojí body a je hodnocena jako vysoká závažnost, protože přímo vystavuje vaše přihlášené zákazníky podvodu. Je to také jeden z nejlevnějších bodů k získání zpět: jedna bezplatná hlavička, asi 15 minut práce vývojáře.