2017-01-27 2 views
0

ist Nehmen wir die Frame-Vorfahren-Direktive. Sagen wir, ich möchte http://*.parent.com erlauben meine Seite an beiden https://child.com und http://child.com zu laden:CSP-URL-Schema http: // stimmt überein, wenn das Schema der Ressource entweder http: // oder https: //

  1. Wenn ich frame-ancestors https://*.parent.com wir Verletzung eine offensichtliche haben
  2. gesetzt Wenn ich frame-ancestors *.parent.com gesetzt haben wir eine Verletzung für https://child.com.
  3. Wenn ich frame-ancestors http://*.parent.com setze, funktioniert es in beiden Fällen. Warum ?

aus der Zitiert CSP2 spec:

  1. Wenn die Quelle Ausdruck einen Schema-Teil hat, der keine Groß- und Kleinschreibung Übereinstimmung für url-Schema ist, dann wieder tut nicht übereinstimmen.
  2. Wenn der Quellausdruck eine Regelung nicht habe, Rückkehr nicht übereinstimmt, wenn eine der folgenden Bedingungen erfüllt ist:
    1. das Schema der URL der geschützten Ressource eine Groß- und Kleinschreibung Übereinstimmung für HTTP ist, und URL-Schema ist Keine Übereinstimmung zwischen Groß- und Kleinschreibung, weder für HTTP noch für HTTPS
    2. Das Schema der URL der geschützten Ressource unterscheidet nicht zwischen Groß- und Kleinschreibung, und URL-Schema berücksichtigt keine Groß-/Kleinschreibung für das Schema der URL der geschützten Ressource.

Fall 2 meiner Beispiele müssen nach Zustand Drossel 5.2 der Spezifikation seit https://child.com kein Spiel für HTTP ist, dass ich verstehe.
Aber warum funktioniert Fall 3 für https://child.com? Laut Bedingung 4 sollte es fehlschlagen, da http://*.parent.com nicht mit dem Schema https://child.com übereinstimmt. Was vermisse ich ?

Antwort

0

Ziel

http://*.parent.com Lassen Sie meine Seite an beiden https://child.com und http://child.com

Fall 3

CSP Politik laden auf child.com:

frame-ancestors http://*.parent.com 

Aber warum funktioniert Fall 3 für https://child.com?

Wenn Sie z. http://1.parent.com, die einige child.com Inhalt iFrames, z.B .:

<iframe src="https://child.com/mycontent"> 

....dann child.com prüft sein CSP frame-ancestors Ausdruck gegen die URL /mycontent anfordert, nämlich:

http://1.parent.com ist im Vergleich zu http://*.parent.com, der übereinstimmt, so wird /mycontent erfolgreich zurückgegeben.

Nach 4 Bedingung sollte es fehlschlagen, da http: //*.parent.com hat nicht das Schema der https://child.com entsprechen. Was vermisse ich ?

Es klingt ein bisschen wie Sie möglicherweise Missverständnis frame-ancestors. In Ihrem Beispiel würde es keine Überprüfungen gegen https://child.com geben. Der Scheck ist , hergestellt vonchild.com, vergleicht die URL, die /mycontent an http://*.parent.com anfordert. Vielleicht verwirren Sie frame-ancestors mit frame-src?

Wie für die Spezifikation, fand ich es sehr schwer zu verstehen, aber glücklicherweise fand ich this very helpful page, die es in etwas verständlicher übersetzt. Ich werde das entsprechende Bit zitieren: -

5 Wenn die weiße Liste Host in der CSP nicht über ein System verfügt, wird der Browser erlaubt:

1 - Lädt Vermögenswerte über HTTP oder HTTPS, wenn die Seite wird über HTTP bedient.

2 - Lädt Assets mit HTTPS, wenn die Seite über HTTPS bedient wird.

Von allen Lese um die ich getan habe, von der CSP Ausdruck der URL-Schema Weglassen sollte Arbeit beide http und https Anfragen zu ermöglichen, implizit. Aber in der Praxis, mit frame-ancestors, hat es für mich überhaupt nicht funktioniert .... und das ist auch in allen Browsern konsistent.

Also, meine praktischen Erfahrungen von CSP mit frame-ancestors haben mich dazu gebracht, dass, um zu glauben, den Zugriff auf Websites zu gewähren, damit sie meine Website-Content iframe können, muß ich die Domain mit dem URL-Schema in meiner Website Präfix CSP frame-ancestors Ausdruck.

Normalerweise würde ich beide http und https zulassen wollen, daher würde ich brauche, z.B .:

frame-ancestors http://*.parent.com https://*.parent.com 
Verwandte Themen