Sicherheit: X-Frame-Options Header gegen Clickjacking

Über eine Einstellung in den HTTP Antwortkopfzeilen kann festgelegt werden, ob die Webseiten auf externen / fremden Seiten eingebettet werden dürfen.

Projektkonfiguration: Stammdaten - xframe_options
Projektkonfiguration: Stammdaten - xframe_options

Ermöglicht wird dies über eine Einstellung in PHP zum HTTP-Header, welche Weblication® CMS in einer aktuellen BASE Projektbasis bereits voreingestellt hat. Sie finden dies in der Projektkonfiguration im Block "Stammdaten".
Standardmässig ist die Einstellung "Einbetten in externen iFrames erlauben" auf NEIN gesetzt und kann bei Bedarf aktiviert werden. Ist die Auswahl auf NEIN gesetzt, werden die Webseiten des Projektes zum HTTP-Header wie folgt ausgeliefert:

Beispiel: Auszug aus einem HTTP Antwortheader mit aktivierter xframe_options Einstellung

X-Frame-Options: SAMEORIGIN

Somit dürfen externe Webseiten die Inhalte Ihrer Webseiten nicht mehr in einem frame, iframe, embed oder object einbinden (siehe hierzu auch Beschreibung in den weiterführenden Links am Artikelende).
Auf diese Weise werden z.B. clickjacking Attacken abgewehrt.
Die Einstellung in der Projektkonfiguration wird über die pre.php des Projektes und der Software entsprechend für die Ausgabe der Webseiten verwendet.

Clickjacking ist eine Technik, bei der ein Computerhacker die Darstellung einer Internetseite überlagert und dann deren Nutzer dazu veranlasst, scheinbar harmlose Mausklicks und/oder Tastatureingaben durchzuführen.
(Quelle: Wikipedia.org)

Individuelle Anpassung über ALLOW-FROM

Wollen Sie eine bestimmte URL erlauben, können Sie den Eintrag in der Projektkonfiguration individuell im XML anpassen. Die nachfolgenden Beispiel unten zeigen links die aktivierte Einstellung im Standard und rechts eine individuell angepasste Einstellung, um https://www.weblication.de das Einbetten zu erlauben. Die URL passen Sie auf die von Ihnen gewünschte URL an.

Beispiel: Auszug aus der Projektkonfiguration mit SAMEORIGIN

<variable description="Einbetten in externen iFrames erlauben" key="xframe_options" type="char.select" values="|SAMEORIGIN" texts="Ja|Nein">SAMEORIGIN</variable>

Beispiel: Auszug aus der Projektkonfiguration mit x-frame-options Einschränkung

<variable description="Einbetten in externen iFrames erlauben" key="xframe_options" type="char.select" values="|SAMEORIGIN|ALLOW-FROM https://www.weblication.de" texts="Ja|Nein|nur weblication.de">ALLOW-FROM https://www.weblication.de</variable>

Beachten Sie beim Einsatz von allow-from die Hinweise auf der Mozilla-Developer Seite, womit dies eine veraltete Richtlinie ist und nicht mehr verwendet werden sollte, statt dessen CSP frame-ancestors (siehe weiterführende Links unten).

Allgemeines

Sollte eine über iFrame, Embed-Layer o.ä. eingebundene Webseite nicht aufrufbar sein, wird dies i.d.R. vom Browser mit einer Fehlermeldung quittiert, welche sich in der Browserkonsole einsehen lässt.

Beispiel: Auszug aus der Browser-Konsole von Firefox bzw. Chrome

Firefox:
Quellübergreifende (Cross-Origin) Anfrage blockiert:
Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf https://www.Externe-Domain.tld/?viewmode=blank&linkback=no.
(Grund: CORS-Anschlag schlug fehl).

Chrome:
Access to XMLHttpRequest at 'https://www.Externe-Domain.tld/?viewmode=blank&linkback=no' from origin 'http://www.Ihre-Domain.tld' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

SAMEORIGIN

Sofern die Webseiten eines Projektes trotz Erlaubnis zum Einbetten in externe iFrames im Request-Header nach wie vor "SAMEORIGIN" ausgeben, kann dies folgende Ursachen haben:

  • das Setzen des Header-Eintrages wird über .htaccess oder die Webserverkonfiguration vorgenommen
  • in älteren Projekten ist ggf. noch folgende Zeile in der pre.php enthalten:
      @header('X-Frame-Options: SAMEORIGIN');
    Löschen Sie diese, um auf die Einstellung in der Projektkonfiguration zurückzugreifen.

Access-Control-Allow-Origin

Sollte nach korrekter Definition eine per Ajax aufgerufene externe URL (z.B. Link mit Ziel-Einstellung "In einem Layer laden") nicht öffnen und im Browser einen Fehler in der Konsole werfen, muss ggf. bei der einzubindenden externen Seite noch folgendes im Header mitgegeben werden:
  @header('Access-Control-Allow-Origin: https://www.Ihre-Domain.tld');