Gleiche Herkunftsrichtlinie
In clientseitigen Programmiersprachen wie JavaScript und ActionScript ist die Same-Origin-Richtlinie ein sehr wichtiges Sicherheitskonzept, das für die Gewährleistung der Datensicherheit von großer Bedeutung ist. Die Same-Origin-Richtlinie legt fest, dass domänenübergreifende Skripte in einer Domäne nicht auf die meisten Eigenschaften und Methoden einer anderen Domäne zugreifen und diese ausführen können. Was ist also die gleiche Domäne und was ist eine unterschiedliche Domäne? Wenn zwei Domänen dasselbe Protokoll (z. B. http), denselben Port (z. B. 80) und denselben Host (z. B. www.example.org) haben, können wir sie als dieselbe Domäne betrachten. Beispielsweise befinden sich http://www.example.org/index.html und http://www.example.org/sub/index.html in derselben Domäne, während http://www.example.org https ist ://www Zwei beliebige .example.org, http://www.example.org:8080, http://sub.example.org bilden eine domänenübergreifende Domain. Die Same-Origin-Richtlinie sollte auch einige Sondersituationen behandeln, z. B. die Einschränkung der Zugriffsberechtigungen von Skripten unter dem Dateiprotokoll. Lokale HTML-Dateien werden im Browser über das Dateiprotokoll geöffnet. Wenn das Skript über das Dateiprotokoll auf andere Dateien auf der Festplatte zugreifen kann, bestehen solche Risiken derzeit noch.
Betroffen von derselben Ursprungsrichtlinie wird die domänenübergreifende gemeinsame Nutzung von Ressourcen eingeschränkt. Mit der Praxis der Menschen und der Weiterentwicklung der Browser wurden jedoch derzeit viele wertvolle Erfahrungen in den Fähigkeiten domänenübergreifender Anforderungen gesammelt und angesammelt. Hier unterteile ich die domänenübergreifende gemeinsame Nutzung von Ressourcen in zwei Typen: Der eine ist eine einseitige Datenanforderung und der andere die bidirektionale Nachrichtenkommunikation. Als nächstes werde ich einige gängige domänenübergreifende Methoden auflisten. Der Quellcode der folgenden domänenübergreifenden Beispiele ist hier erhältlich .
Einweg-domänenübergreifend
JSONP
JSONP (JSON with Padding) ist eine einfache und effiziente domänenübergreifende Methode. Das Skript-Tag in HTML kann JavaScript aus anderen Domänen laden und ausführen, sodass wir über Skript-Tags dynamisch Ressourcen aus anderen Domänen laden können. Wenn ich beispielsweise die Daten von Domäne B von der Seite Seite A von Domäne A laden möchte, deklariere ich auf der Seite Seite B von Domäne B die für Seite A erforderlichen Daten in Form von JavaScript und verwende dann das Skript-Tag in pageA lädt pageB, dann wird in pageB das Skript ausgeführt. JSONP fügt auf dieser Basis eine Rückruffunktion hinzu. Nachdem SeiteB geladen wurde, wird die in SeiteA definierte Funktion ausgeführt und die erforderlichen Daten werden in Form von Parametern an die Funktion übergeben. JSONP ist einfach zu implementieren, birgt jedoch auch einige Sicherheitsrisiken. Wenn ein Skript eines Drittanbieters nach Belieben ausgeführt wird, kann es den Seiteninhalt manipulieren und sensible Daten abfangen. Für die Datenübertragung zwischen vertrauenswürdigen Parteien ist JSONP jedoch eine sehr geeignete Wahl.
Flash URLLoader
Flash verfügt über eigene Sicherheitsrichtlinien, um zu deklarieren, auf welche Domänen-SWF-Dateien zugegriffen werden kann. Außerdem kann die API verwendet werden, um zu bestimmen, von welchen Domänen sie geladen werden können. Beim domänenübergreifenden Zugriff auf Ressourcen, beispielsweise beim Anfordern von Daten auf der Domäne www.b.com von der Domäne www.a.com, können wir Flash zum Senden von HTTP-Anfragen verwenden. Ändern Sie zunächst die Datei crossdomain.xml in der Domäne www.b.com (normalerweise im Stammverzeichnis gespeichert, wenn keine manuelle Erstellung erforderlich ist) und fügen Sie www.a.com zur Whitelist hinzu. Zweitens wird die HTTP-Anfrage über den Flash URLLoader gesendet und schließlich wird das Antwortergebnis über die Flash-API an JavaScript übergeben. Flash URLLoader ist eine sehr verbreitete domänenübergreifende Lösung, aber wenn iOS unterstützt werden muss, kann diese Lösung nichts tun.
Zugangskontrolle
Die Zugriffskontrolle ist eine transzendentere domänenübergreifende Methode. Sie wird derzeit nur in einigen Browsern unterstützt (Firefox, Google Chrome usw. werden über XMLHTTPRequest implementiert, und IE8 wird über XDomainRequest implementiert). ). Die Antwort auf die Anfrage muss einen Access-Control-Allow-Origin-HTTP-Antwortheader enthalten, der die Erreichbarkeit der angeforderten Domäne angibt. Beispielsweise sendet www.a.com eine domänenübergreifende HTTP-Anfrage an asset.php unter www.b.com . Anschließend muss asset.php den folgenden Antwortheader hinzufügen:
header("Access-Control-Allow-Origin: http://www.a.com");