X-Frame-Options Header richtig konfigurieren

Was macht der X-Frame-Options Header?

Ein gesetzter X-Frame-Options Header verhindert, dass die Webseite auf anderen Webseiten als iFrame eingebunden wird.

Was können die Auswirkungen eines nicht gesetzten X-Frame-Options Header sein?

Wenn kein X-Frame-Options Header gesetzt ist, kann die Webseite durch einen Angreifer als transparenter iFrame auf einer bösartigen Seite eigebunden werden (Clickjacking):

In diesem Fall sieht der User nur das Bingo Spiel, allerdings ist im Vordergrund ein transparenter iFrame mit einer anderen Seite eingebunden (in der Grafik natürlich nur halbtransparent dargestellt, damit man das Prinzip zeigen kann). Wenn der User nun vermeintlich auf ein Bingo Feld klickt, wird dieser Klick tatsächlich auf der eingebetteten Webseite ausgeführt:

Mit einer geschickt konstruierten Webseite, die Klicks auf bestimmten Stellen des Bildschirms forciert, könnte der Angreifer einen User dann beispielsweise dazu bringen, sein Passwort auf der eingebetteten Webseite zu ändern, einen neuen Account anzulegen oder Sicherheitseinstellungen zu deaktivieren.

Dies lässt sich mit der Webseite clickjacker.io auch praktisch demonstrieren:

Für die example.com Domain ist der X-Frame-Options Header nicht gesetzt, daher kann, wie im Screenshot zu sehen, die Webseite auf der clickjacker.io Webseite als iFrame eingebunden werden.  

Bei einem echten Clickjacking Angriff wäre der Frame vollständig transparent, sodass der User die example Webseite gar nicht sieht. Er sieht lediglich den Inhalt der bösartigen Webseite, auf der er sich befindet. Der transparente Frame mit der eingebundenen Webseite liegt allerdings über diesem Inhalt. Ein Klick wird also nicht auf der eigentlichen Webseite ausgeführt, sondern auf der Webseite im iFrame. Auf diese Weise kann ein Angreifer einen User dazu bringen, Aktionen an der eingebundenen Webseite vorzunehmen (z.B. die Änderung seines Passworts).

Bei einem gesetzten X-Frame-Options Header sollte dagegen die folgende Ansicht erscheinen:

Die Webseite google.de kann nicht auf anderen Webseiten eingebunden werden, somit ist auch kein Clickjacking möglich.

Welche Werte gibt es für den X-Frame-Options Header?

  • DENY
    • Diese Einstellung verbietet, dass die Webseite als iFrame eingebunden wird.
  • SAMEORIGIN
    • Diese Einstellung verbietet, dass die Webseite auf externen Seiten als iFrame eingebunden wird, erlaubt aber das Einbinden auf derselben Seite (z.B. könnte die Startseite example.com auf der Unterseite example.com/contact als iFrame eingebunden werden)
  • ALLOW-FROM
    • Diese Einstellung ist veraltet und hat früher erlaubt, dass die Webseite von einer bestimmten URL als iFrame eingebunden werden konnte (z.B. ALLOW-FROM https://example.com, erlaubt die Einbindung der Webseite als iFrame auf example.com)
    • WICHTIG: Diese Einstellung wird von modernen Browsern nicht mehr unterstützt und hat somit denselben Effekt wie den Header nicht zu setzen

Auf welche Werte sollte der X-Frame-Options Header gesetzt sein?

Für die meisten Webseiten sollte die strikteste Einstellung (DENY) gewählt werden.

Wenn es einen Grund gibt, die Webseite auf einer Unterseite als iFrame einzubinden, sollte SAMEORIGIN gewählt werden.

Die Einstellung ALLOW-FROM sollte nicht verwendet werden, da sie veraltet ist und von modernen Browsern nicht mehr akzeptiert wird. Diese Einstellung hat also denselben Effekt, als den Header nicht zu setzen.

 In Einzelfällen kann es sinnvoll sein, den X-Frame-Options Header bewusst nicht zu setzen. Das gilt dann, wenn die Webseite gezielt auf anderen Webseiten eingebunden werden soll. Ein Beispiel hierfür könnte ein Onlineshop sein, der es seinen Affiliate Partner erlaubt, Produkte per iFrame auf deren eigenen Webseiten einzubinden.