X-Frame-Options: HTTP-Security-Header zum Schutz vor Clickjacking
Durch Verwendung des HTTP-Security-Headers X-Frame-Options können sogenannte Clickjacking-Angriffe unterbunden werden. Hierfür wird dem Webbrowser mitgeteilt, inwieweit die aufgerufene Webseite in eine andere Webseite - z.B. via Frames - eingebettet werden darf.
Details zum Einsatz von X-Frame-Options erfahrt ihr in diesem Beitrag.
X-Frame-Options - Beschreibung & Funktionsweise
Im Normalfall kann eine Webseite ohne Weiteres in eine andere Webseite eingebettet werden. Dies kann über folgende HTML-Elemente erfolgen:
frame
iframe
object
embed
Um dem Webbrowser mitzuteilen, wie dieser sich verhalten soll, wenn die eigene Webseite in eine andere Webseite eingebunden werden soll, wird in der HTTP-Antwort der entsprechende HTTP-Header mitgesendet:
Im o.a. Beispiel wird die Einstellung deny
gewählt. Hiermit wird der Webbrowser dazu angehalten, die Einbettung der Webseite zu verbieten.
Beispiel - X-Frame-Options in Aktion
Zum Verdeutlichen der Funktionsweise soll ein einfaches Beispiel dienen. Angenommen eine Webseite von Domain A möchte eine Webseite von Domain B einbinden. Der vereinfachte Quellcode für die Webseite von Domain B würde wie folgt aussehen:
Der Quellcode für die Webseite von Domain A sehe hingegen so aus:
Ohne weitere Vorkehrungen würde beim Aufruf der Webseite von Domain A die Webseite von Domain B im iframe vom Webbrowser angezeigt werden:
Um nun zu Verhindern, dass der Webbrowser das Einbetten bzw. Einbinden der Webseite von Domain B erlaubt, kann der X-Frame-Options-Header z.B. mit dem Wert deny
verwendet werden. Als Ergebnis würde der Webbrowser dieses Mal einen entsprechenden Fehlerhinweis anzeigen:
Header-Einstellungen im Detail
Der X-Frame-Options-Header unterstützt folgende drei Einstellungswerte:
deny
Diese Angabe führt dazu, dass die Webseite generell nicht eingebettet werden kann.
sameorigin
In diesem Fall kann die Webseite nur von anderen Webseiten der gleichen Quelle eingebettet werden.
allow-from uri
Die Einbindung der Webseite ist nur von Webseiten aus der angegebenen Quelle gestattet.
X-Frame-Options vs CSP frame-anchestors
Die Funktionalität der Policy-Direktive frame-anchestors
der Content-Security-Policy (CSP) überschneidet sich mit dem X-Frame-Options-Header. Laut der W3C-Spezifikation hat die CSP frame-anchestors
-Angabe Vorrang und macht die Angabe des X-Frame-Headers eigentlich obsolet. Letztendlich schadet es aber auch nicht den Header trotz CSP mitzusenden.
Webbrowser-Unterstützung
X-Frame-Options wird von allen gängigen Webbrowsern unterstützt (siehe caniuse.com). Allerdings wird der Einstellungswert allow-from
anscheinend von den meisten Webbrowsern nicht unterstützt.
X-Frame-Options-Header übertragen
Damit der Webserver den X-Frame-Options-Header zum Client mitsendet, muss die Konfiguration des Webservers angepasst werden.
Apache:
In der Konfigurationsdatei von Apache oder in der .htaccess
ist folgende Anweisung zu hinterlegen:
nginx:
Analog dazu ist für nginx in der Konfigurationsdatei Folgendes einzufügen:
X-Frame-Options-Einstellung von codingblatt.de
Für meinen Blog verwende ich die Einstellung deny
. Ein Einbinden ist also generell nicht erlaubt. Wie oben bereits beschrieben, könnte ich den X-Frame-Options-Header theoretisch aber auch weglassen, da ich auch die Content-Security-Policy und die dazugehörige frame-anchestors
-Direktive gesetzt habe.
Fazit
Um eure Website oder Webanwendung vor Clickjacking zu schützen, solltet ihr als weiteren Sicherheitsbaustein den X-Frame-Options-Header verwenden.