Wird Content-Security-Policy
ignoriert X-Frame-Options
, zurückgegeben von einem Server, oder ist X-Frame-Options
immer noch primär?
Angenommen, ich habe:
X-Frame-Options: DENY
Content-Security-Policy: frame-src a.com
lädt der Browser diesen Rahmen?
Es ist unklar.
Auf der einen Seite bestreitet Ссылка ausdrücklich das Framing.
Auf der anderen Seite erlaubt Ссылка explizit das Framing für Ссылка .
Die frame-src
CSP-Anweisung (die veraltet ist und ersetzt durch child-src
) bestimmt, welche Quellen in einem Frame auf einer Seite verwendet werden können.
Der Header X-Frame-Options
response bestimmt andererseits, welche anderen Seiten diese Seite in einem iframe verwenden können.
In Ihrem Fall zeigt http://a.com
mit X-Frame-Options: DENY
an, 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 schneidet, erfolgt über die frame-ancestors
Richtlinie . Aus der CSP-Spezifikation (Hervorhebung von mir):
Diese Anweisung ähnelt dem Header
X-Frame-Options
, der mehrere enthält Benutzeragenten haben implementiert. Der Quellcode'none'
ist entspricht ungefähr demDENY
,'self'
bisSAMEORIGIN
dieses Headers, und so weiter. Der Hauptunterschied besteht darin, dass viele Benutzeragenten implementierenSAMEORIGIN
, so dass es nur mit der obersten Ebene übereinstimmt Standort des Dokuments. Diese Direktive überprüft jeden Vorfahren. Wenn überhaupt Vorfahr passt nicht, die Last wird abgebrochen. [RFC7034]Die
frame-ancestors
-Direktive hebt den HeaderX-Frame-Options
auf. Wenn eine Ressource über beide Richtlinien verfügt, sollte die Richtlinieframe-ancestors
durchgesetzt und die RichtlinieX-Frame-Options
ignoriert werden.
Eine ältere Frage Ich habe angegeben, dass dies zu dieser Zeit in Firefox nicht funktioniert hat, aber hoffentlich haben sich die Dinge jetzt geändert.
Inhaltssicherheitsrichtlinie: Die Richtlinie 'child-src' wurde nicht mehr unterstützt. Bitte verwenden Sie die Anweisung 'worker-src', um Arbeiter zu steuern, oder die Anweisung 'frame-src', um Rahmen zu steuern.
Sieht so aus, als wäre child-src
jetzt die veraltete und frame-src
ist zurück.
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 die Einrahmung verweigert, kann die Client-Website diese Seite nicht in iframe
anzeigen, je nachdem, welche Werte von Content-Security-Policy
festgelegt sind.
Ich habe jedoch keine Bestätigungen in der Dokumentation gefunden.
Getestet auf Chrome 54 und IE 11.
Dies ist nicht allgemein zutreffend; Chrome ignoriert X-Frame-Optionen, während Safari 9 und darunter CSP-Frame-Vorfahren ignoriert. Safari 10 respektiert die CSP-Frame-Vorfahren-Direktive, priorisiert jedoch X-Frame-Optionen, falls angegeben.
Tags und Links http http-headers content-security-policy x-frame-options