Wird Content-Security-Policy
X-Frame-Options
ignoriert, von einem Server zurückgegeben oder ist X-Frame-Options
noch primär?
Angenommen, ich habe:
X-Frame-Options: DENY
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 .
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 derDENY
,'self'
derSAMEORIGIN
, 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 denX-Frame-Options
-Header. Wenn eine Ressource über beide Richtlinien verfügt, sollte dieframe-ancestors
-Richtlinie durchgesetzt werden und dieX-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.
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.
Keine Ihrer Hypothesen ist allgemein zutreffend.
X-Frame-Options
.frame-ancestors
.frame-ancestors
-Direktive, aber prioritize X-Frame-Options
, wenn beide angegeben sind.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.