it-swarm.com.de

Beste Methode: Access-Control-Allow-Origin mit mehreren Ursprungsdomänen

Diese Frage wurde zuvor an diese Stelle gestellt und mit einer Reihe guter Antworten versehen, vor allem: Zugriffskontrolle - Erlauben - Ursprung Mehrere Ursprungsdomänen?

Es scheint jedoch eine Lücke in der Erklärung hinsichtlich der genehmigten Methode zu geben, die durchgeführt werden sollte. Beim Lesen der W3-Dokumentation haben wir einen scheinbaren Konflikt. 

Erstens sehen wir die Antwort als die Methode right in vielen der vorherigen Antworten, die besagt, dass der Host-Server den angegebenen 'Ursprung' dynamisch wiederholen muss, wenn er auf einer vordefinierten 'Whitelist' erscheint. http://www.w3.org/TR/cors/#resource-implementation

Viele der Antworten und Methoden weisen jedoch auch auf eine durch Leerzeichen getrennte Liste hin, die auch als Methode zum Übergeben mehrerer 'Ursprünge' verwendet werden kann. Wenn wir uns eine andere W3-Dokumentation unter http://www.w3.org/wiki/CORS_Enabled anschauen, sehen wir ein Beispiel dafür im ersten Abschnitt der Seite: 

 Access-Control-Allow-Origin: http://example.com:8080 http://blah.example.com http://foo.example.com

Von diesen beiden Methoden wäre ich gleichermaßen gerne einverstanden. Es kann jedoch eine große Liste von URLs geben, die in der Liste aufgeführt werden müssen. Daher wollte ich sicherstellen, dass ich dies beim ersten Mal richtig mache. Wenn jemand Einblick in die beiden oben genannten Methoden hat, wäre ich sehr dankbar, wenn Sie die Entscheidung in Ihren Entscheidungen hören und ob es einen definitiven Leitfaden für die empfohlene Methode gibt, die ich möglicherweise versäumt habe.

29
JonnyIrving

Die Dokumentation dazu scheint zu implizieren, dass sie mehrere Ursprünge mit einer durch Leerzeichen getrennten Liste zulässt. Dies ist jedoch nicht das, was sie eigentlich bedeutet. Folgendes könnte ich als die endgültigste Antwort auf Ihre Frage zusammenfassen: Der Access-Control-Allow-Origin-Header sollte den gleichen Wert wie der Origin-Header haben, solange Sie dies zulassen möchten.

Der Grund dafür ist, dass es sich nicht um eine Whitelist handelt, die Sie an den Client zurücksenden, weil der Client technisch eine durch Leerzeichen getrennte Liste mit Ursprungsdaten senden kann, sodass der Server die Anforderung überprüfen kann. Der Zweck der Origin-Liste besteht darin, dass die Anfrage aus mehreren Quellen stammen konnte (dh die Anfrage wurde zwischen Domänen umgeleitet). Eine Testsuite macht es leicht, dieses Verhalten mit unterschiedlichen Umleitungsmöglichkeiten zu beobachten, auch wenn (durch Firefox) niemals eine durch Leerzeichen getrennte Liste erstellt wird.

Dies ist unten im ersten verknüpften W3C-Dokument dargestellt Sie haben Folgendes angegeben:

Der Access-Control-Allow-Origin-Header gibt an, ob eine Ressource gemeinsam genutzt werden kann, indem der Wert des Origin-Request-Headers "*" oder "null" in der Antwort zurückgegeben wird. ABNF:

Access-Control-Allow-Origin = "Access-Control-Allow-Origin" ":" Origin-Liste-Oder-Null | "*"

In der Praxis ist die Origin-Liste-oder-Null-Produktion stärker eingeschränkt. Anstatt eine durch Leerzeichen getrennte Ursprungsliste zuzulassen, handelt es sich entweder um einen einzelnen Ursprung oder um die Zeichenfolge "null".

Und noch einmal in die Definition der Origin-Liste . Außerdem wird angezeigt, wenn Sie die Zeichenfolge "null" als Herkunft zulassen möchten, sie könnte jedoch nicht in eine Ursprungsliste eingebettet werden.

Bleiben Sie also bei dem dynamisch generierten Header, der auf dem Origin-Header des Clients basiert und ob dieser zu Ihrer Whitelist passt.

37
Pluto

Wenn Sie ein Origin zulassen müssen, das ein bestimmtes Word-Beispiel enthält, können Sie die folgende Konfiguration in Ihrem Apache-vhost verwenden.

SetEnvIf Origin "^((?:https?:\/\/)?(?:[^@\n][email protected])?(?:www.)?.example?.*)" REFERER=$0 
Header always set Access-Control-Allow-Origin %{REFERER}e env=REFERER

Dies erfüllt einige der folgenden Origin-Bedingungen:

http://abc.bcd.example.com
https://www.example.in 
http://abcdexample.com 
many more

Sie können den obigen Regex nach Ihren Wünschen anpassen.

0
Sandeep M