Jak umožnit načítání stránky v rámu pomocí frame-ancestors

HTML značka <iframe> má dost zajímavou historii.

V dávných dobách se používala pro načítání společných částí stránek jako je třeba menu nebo patička (než se víc prosadilo např. skládání obsahu v PHP).

Největší využití má ale nejspíš pro zobrazení cizích webů.

Dříve se touto značkou hojně řešilo vkládání dynamického obsahu. Jako třeba různých anket, chatů, komentářů a podobně.

Anketa

Takové věci se dnes obvykle řeší spíš JavaScriptem, který do stránky přímo přidává potřebné HTML elementy.

Asi nejrozšířenější je používání <iframe> pro reklamu, protože JS je hodně mocný kvůli tomu, že má prakticky neomezenou kontrolu nad stránkou.

A u reklamy, která se ve finále často načítá bůhvíodkud, je spíš žádoucí, aby se stránkou nemohla manipulovat.

Clickjacking

Další hodně populární využití rámů byl tzv. clickjacking.

Clickjacking

To spočívalo v tom, že se na stránku umístil nějaký lákavý prvek, na který má návštěvník kliknout. Přes ten se absolutně naposicovala nějaká stránka v <iframe>.

Díky zprůhlednění rámu této stránky CSS vlastností opacity tak mohl návštěvník nevědomky kliknout na nějakou akci.

Zákaz načtení do <iframe>

Jako prevence clickjackingu je dost běžné, že dnes skoro žádný web nejde do rámu načíst.

Twitter iframe deny

Dříve se to řešilo hlavičkou X-Frame-Options:

X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN

Povolení vybraných domén

Právě frame-ancestors je nástupcem X-Frame-Options sloužící k povolení konkrétních webů, které mohou danou stránku načíst do rámu.

Tyto domény je nutné vyjmenovat. Takže provozovatel webu musí ručně udělit souhlas s načítáním do rámu. Jinak to prohlížeče zablokují.

Používá se přes hlavičku Content-Security-Policy:

Content-Security-Policy: frame-ancestors 'self' https://jecas.cz https://*.example.com;

Tento zápis znamená, že stránka, která tuto hlavičku posílá, může být vložena do rámu na:

  1. 'self' – na stejné doméně

  2. https://jecas.cz – na stránce https://jecas.cz

  3. https://*.example.com – na libovolné subdoméně example.com s HTTPS protokolem

Klíčovým slovem 'none' se celkově zablokuje načtení do rámu.

Jak nastavit HTTP hlavičku

Nastavení Content-Security-Policy hlavičky závisí na použité technologii.

V každém případě musí hlavička přijít přímo ze serveru. Nastavit ji například klientským JS tak není možné.

Apache .htaccess

Header set Content-Security-Policy "frame-ancestors 'self' https://example.com"

Nginx

add_header Content-Security-Policy "frame-ancestors 'self' https://example.com";

PHP

header("Content-Security-Policy: frame-ancestors 'self' https://example.com");

To je všechno. Líbil se vám článek a chcete se dozvědět, až vyjde další?

Sledujte:

 

Připomínky mi pište do komentářů ↓

Varování v JS konsoli

Upozornění v JS konsoli

Jak do JS konsole vložit výrazné varování o risicích vkládání cizího kódu.

Jak vytvořit bezpečné heslo

Bezpečnost hesel

Postup, jak si vymyslet a zapamatovat dostatečně silné heslo.

Bezpečnostní risika webu

Bezpečnost webových stránek

Bezpečnostní risika na webových stránkách a jejich řešení a prevence.

Clickjacking na Facebooku

Clickjacking na Facebooku

Jak funguje clickjacking na Facebooku a jak se proti němu bránit.

40 nejčastějších hesel

40 nejpoužívanějších hesel

Jaká hesla často používají čeští uživatelé.

Komentáře