it-swarm.com.de

Wie funktioniert die Content-Security-Policy mit X-Frame-Optionen?

Wird Content-Security-PolicyX-Frame-Options ignoriert, von einem Server zurückgegeben oder ist X-Frame-Options noch primär?

Angenommen, ich habe:

  • eine Website http://a.com mit X-Frame-Options: DENY
  • und eine Website http://b.com mit Content-Security-Policy: frame-src a.com

wird der Browser diesen Frame laden?

Es ist unklar.
.__ Einerseits lehnt http://a.com das Framing ausdrücklich ab.
Andererseits erlaubt http://b.com ausdrücklich das Framing für http://a.com .

15

Die CSP-Direktive frame-src (die veraltet ist und durch child-src ersetzt wird) bestimmt, welche Quellen in einem Frame auf einer Seite verwendet werden können.

Der X-Frame-Options-Antwortheader bestimmt dagegen, welche anderen Seiten diese Seite in einem Iframe verwenden können.

In Ihrem Fall bedeutet http://a.com mit X-Frame-Options: DENY, dass keine andere Seite es in einem Frame verwenden kann. Es spielt keine Rolle, was http://b.com in seinem CSP hat - keine Seite kann http://a.com in einem Frame verwenden.


Der Ort, an dem sich X-Frame-Options mit CSP kreuzt, ist über die Direktive frame-ancestors . Aus der CSP-Spezifikation (Hervorhebungsmine):

Diese Anweisung ähnelt der X-Frame-Options-Kopfzeile, die mehrere Benutzeragenten haben implementiert. Der 'none'-Quellausdruck lautet entspricht in etwa der DENY, 'self' der SAMEORIGIN, und so weiter. Der Hauptunterschied besteht darin, dass viele Benutzeragenten .__ implementieren. SAMEORIGIN so, dass es nur mit der obersten Ebene übereinstimmt Speicherort des Dokuments. Diese Direktive überprüft jeden Vorfahren. Wenn überhaupt Vorfahren stimmt nicht überein, das Laden wird abgebrochen. [RFC7034]

Die frame-ancestors-Direktive ersetzt den X-Frame-Options-Header. Wenn eine Ressource über beide Richtlinien verfügt, sollte die frame-ancestors-Richtlinie durchgesetzt werden und die X-Frame-Options-Richtlinie sollte ignoriert werden.

Eine ältere Frage gab an, dass dies zu dieser Zeit in Firefox nicht funktionierte, aber hoffentlich haben sich die Dinge jetzt geändert.


UPDATE April 2018:

Richtlinie zur Inhaltssicherheit: Die Richtlinie "child-src" ist veraltet. Bitte verwenden Sie die Direktive 'worker-src' zur Kontrolle von Arbeitern oder die Direktive 'frame-src' zur Kontrolle von Frames.

Sieht aus, als wäre child-src jetzt der veraltete und frame-src ist zurück. 

27
Anand Bhat

Keine Ihrer Hypothesen ist allgemein zutreffend.

  • Chrome ignoriert X-Frame-Options.
  • Safari 9 und darunter ignorieren CSP frame-ancestors.
  • Safari 10-12 beachtet die CSP frame-ancestors-Direktive, aber prioritize X-Frame-Options, wenn beide angegeben sind.
4
NIRUPAM TEWARY

Die Antwort wurde durch Tests in der Praxis gefunden.
Ich habe zwei Websites erstellt und die beschriebene Situation reproduziert.

Es scheint, dass X-Frame-Optionen primär sind.
Wenn der Zielserver das Framing ablehnt, kann die Client-Website diese Seite nicht in iframe anzeigen, unabhängig davon, welche Werte von Content-Security-Policy eingestellt sind.

Ich habe jedoch keine Bestätigungen in der Dokumentation gefunden.

Getestet auf Chrome 54 und IE 11.