X-FRAME-OPTIONS HTTP hlavička funguje jako prostředek, jak může server sdělit prohlížeči svou představu o chování stránky vložené v rámu (frame, iframe). Server tak může ovlivnit, zda jím vytvořená stránka smí být vložena všude, jen z jiných stránek téhož serveru nebo nikdy nikam.

Hlavička X-FRAME-OPTIONS funguje především jako ochrana proti clickjackingu (legitimní stránka je natažena ve framu a překryta průhledným obsahem, při kliknutí na místo, kde je v legitimní stránce nějaký prvek je vykonáno kliknutí v záškodnickém průhledném rámu), můžeme jí využít ale i pokud si nepřejeme stránky zobrazovat jinde vložené ve rámu (třeba obalené cizím webem, reklamou a podobně). Proti clickjackingu se využívá například i javascript, který detekuje, že je stránka zobrazena ve framu a dovede provést redirect tak, aby se z rámu vymanila do horního, rodičovského okna. JavaScript ale není zcela spolehlivá metoda. 

Hlavička X-FRAME-OPTIONS může mít dvě hodnoty:

  • SAMEORIGIN - je povoleno zobrazovat stránku v rámu na vlastním webu
  • DENY - stránka nikdy nesmí být zobrazena v rámu
Podpora je v nových prohlížečích v pořádku:
Internet Explorer: 8.0
Firefox: (Gecko)3.6.9 (1.9.2.9)
Opera: 10.50
Safari: 4.0
Chrome: 4.1.249.1042
Zdroj: developer.mozilla.org
V PHP můžete hlavičku nastavit voláním funkce header, například:
header('X-Frame-Options: DENY'); 
nebo:
header('X-Frame-Options: SAMEORIGIN');

V Apachi v konfiguraci virtualhosta pak stačí:

Header set X-Frame-Options SAMEORIGIN

Nginx by měl akceptovat konfiguraci:

add_header X-Frame-Options SAMEORIGIN;

Pozor! Než hlavičku nastavíte, zvažte zda neposkytujete některému jinému webu svůj obsah v podobě stránky připravené pro vložení do iframu. Typicky se tak vkládá reklamní bloček s nabídkou volných pracovních pozic a pod. V takovém případě by se na stránkách Vašeho partnera začala zobrazovat chybová zpráva obdobná té v obrázcích níže.

V chromiu se mi místo zakázaného rámce zobrazí pouze prázdné místo, opera zobrazí srozumitelnou hlášku o nemožnosti rám načíst s prolinkem na originální stránku. Internet Explorer 9 zobrazí také srozumitelnou chybovou hlášku.

Informace prohlížeče opera o zakázaném zobrazení iframu

(Obrázek 1: informace o nemožnosti zobrazit stránku v iframu, opera 11.64)

informace o nemožnosti zobrazit stránku v iframu, Internet Explorer 9

(Obrázek 2: informace o nemožnosti zobrazit stránku v iframu, Internet Explorer 9)

 

Pokud nemáte možnost manipulovat s HTTP hlavičkami a přesto byste rádi dosáhli podobné funkcionality, využijte JavaScript. Kód, který to řeší se běžně označuje jako Framekiller. Jeho nejjednodušší implementace může vypadat nějak takto:

Framekiller jde ale eliminovat a navíc vyžaduje podporu JavaScriptu na klientu.

Více různých implementací framekilleru a detailní popis naleznete na wikipedia stránce framekiller.