Was ist ursprungsübergreifende gemeinsame Nutzung von Ressourcen?

Cross-Origin Resource Sharing (CORS) ist ein Mechanismus zur Integration von Anwendungen. CORS bestimmt für Client-Webanwendungen, die in einer Domain geladen sind, eine Möglichkeit zur Interaktion mit Ressourcen in einer anderen Domain. Dies ist nützlich, da komplexe Anwendungen in ihrem clientseitigen Code häufig auf APIs und Ressourcen von Drittanbietern verweisen. Beispielsweise kann Ihre Anwendung Ihren Browser verwenden, um Videos von einer Videoplattform-API abzurufen, Schriftarten aus einer öffentlichen Schriftartenbibliothek zu verwenden oder Wetterdaten aus einer nationalen Wetterdatenbank anzuzeigen. Mit CORS kann der Client-Browser vor der Datenübertragung bei den Servern Dritter prüfen, ob die Anfrage autorisiert ist.

Warum ist die ursprungsübergreifende gemeinsame Nutzung von Ressourcen wichtig?

In der Vergangenheit, als Internet-Technologien noch neu waren, traten Probleme mit Cross-Site Request Forgery (CSRF) auf. Durch diese Probleme wurden gefälschte Client-Anfragen vom Browser des Opfers an eine andere Anwendung gesendet.

Zum Beispiel hat sich das Opfer bei der Anwendung seiner Bank angemeldet. Dann wurden sie dazu verleitet, eine externe Website auf einem neuen Browser-Tab zu laden. Die externe Website verwendete dann die Cookie-Anmeldeinformationen des Opfers und leitete Daten an die Bankanwendung weiter, während sie vorgab, das Opfer zu sein. Unbefugte Benutzer hatten dann unbeabsichtigten Zugriff auf die Bankanwendung.

Um solche CSRF-Probleme zu vermeiden, implementieren jetzt alle Browser die Gleiche-Herkunft-Richtlinie.

Gleiche-Herkunft-Richtlinie

Heutzutage verlangen Browser, dass Clients nur Anfragen an eine Ressource senden können, die denselben Ursprung wie die URL des Clients hat. Das Protokoll, der Port und der Hostname der URL des Clients sollten alle mit dem Server übereinstimmen, den er anfordert.

Stellen Sie sich zum Beispiel den Ursprungsvergleich für die folgenden URLs mit der Client-URL http://store.aws.com/dir/page.html vor.

URL

Ergebnis

Grund

http://store.aws.com/dir2/new.html

Gleicher Ursprung

Nur der Weg unterscheidet sich

http://store.aws.com/dir/inner/other.html

Gleicher Ursprung

Nur der Weg unterscheidet sich

https://store.aws.com/page.html

Anderer Ursprung      

Anderes Protokoll

http://store.aws.com:81/dir/page.html

Anderer Ursprung

Anderer Port (http:// ist standardmäßig Port 80)

http://news.aws.com/dir/page.html

Anderer Ursprung

Anderer Host

Die Gleiche-Herkunft-Richtlinie ist also hochsicher, aber für echte Anwendungsfälle unflexibel.

Cross-Origin Resource Sharing (CORS) ist eine Erweiterung der Gleiche-Herkunft-Richlinie. Sie benötigen es für die autorisierte gemeinsame Nutzung von Ressourcen mit externen Dritten. Beispielsweise benötigen Sie CORS, wenn Sie Daten von externen APIs abrufen möchten, die öffentlich oder autorisiert sind. Sie benötigen CORS auch, wenn Sie autorisierten Drittanbietern den Zugriff auf Ihre eigenen Serverressourcen gewähren möchten.

Wie funktioniert die ursprungsübergreifende gemeinsame Nutzung von Ressourcen?

Bei der Standard-Internetkommunikation sendet Ihr Browser eine HTTP-Anfrage an den Anwendungsserver, empfängt Daten als HTTP-Antwort und zeigt sie an. In der Browser-Terminologie wird die aktuelle Browser-URL als aktueller Ursprung und die Drittanbieter-URL als ursprungsübergreifend bezeichnet.

Wenn Sie eine herstellerübergreifende Anfrage stellen, ist dies der Anfrage-Antwort-Prozess:

  1. Der Browser fügt der Anfrage einen Ursprungs-Header mit Informationen über das Protokoll, den Host und den Port des aktuellen Ursprungs hinzu
  2. Der Server überprüft den aktuellen Ursprungs-Header und antwortet mit den angeforderten Daten und einem Access-Control-Allow-Origin-Header
  3. Der Browser sieht die Header der Zugriffskontrollanfragen und gibt die zurückgegebenen Daten an die Client-Anwendung weiter.

Wenn der Server keinen quellübergreifenden Zugriff zulassen möchte, antwortet er alternativ mit einer Fehlermeldung.

Ursprungsübergreifende gemeinsame Nutzung von Ressourcen (CORS)

Stellen Sie sich zum Beispiel eine Website mit dem Namen https://news.example.com vor. Diese Site möchte über eine API auf partner-api.com auf Ressourcen zugreifen.

Entwickler unter https://partner-api.com konfigurieren zunächst die Header zur ursprungsübergreifenden gemeinsamen Nutzung von Ressourcen (CORS) auf ihrem Server, indem sie new.example.com zur Liste der zulässigen Ursprünge hinzufügen. Sie tun dies, indem sie die folgende Zeile zu ihrer Serverkonfigurationsdatei hinzufügen.

Access-Control-Allow-Origin: https://news.example.com

Sobald der CORS-Zugriff konfiguriert ist, kann news.example.com Ressourcen von partner-api.com anfordern. Auf jede Anfrage antwortet partner-api.com mit Access-Control-Allow-Credentials: „wahr“ Der Browser weiß dann, dass die Kommunikation autorisiert ist, und ermöglicht den quellenübergreifenden Zugriff.

Wenn Sie Zugriff auf mehrere Ursprünge gewähren möchten, verwenden Sie eine durch Kommas getrennte Liste oder Platzhalterzeichen wie *, die allen Benutzern Zugriff gewähren.

Was ist eine CORS-Preflight-Anfrage?

In HTTP sind Anfragemethoden die Datenoperationen, die der Client vom Server ausführen lassen möchte. Zu den gängigen HTTP-Methoden gehören GET, POST, PUT und DELETE.

Bei einer regulären Interaktion der ursprungsübergreifenden gemeinsamen Nutzung von Ressourcen (CORS) sendet der Browser die Anfrage und die Zugriffskontroll-Header gleichzeitig. In der Regel handelt es sich dabei um GET-Datenanfragen, die als risikoarm gelten.

Einige HTTP-Anfragen werden jedoch als komplex angesehen und erfordern eine Serverbestätigung, bevor die eigentliche Anfrage gesendet wird. Der Vorabgenehmigungsprozess wird als Preflight-Anfrage bezeichnet.

Komplexe ursprungsübergreifende Anfragen

Ursprungsübergreifende Anfragen sind komplex, wenn sie eines der folgenden Elemente verwenden:

  • Andere Methoden als GET, POST oder HEAD
  • Andere Header als Accept-Language, Accept oder Content-Language
  • Content-Type-Header außer multipart/form-data, application/x-www-form-urlencoded oder text/plain

So werden beispielsweise Anfragen zum Löschen oder Ändern vorhandener Daten als komplex angesehen.

So funktionieren Preflight-Anfragen

Browser erstellen Preflight-Anfragen, falls sie benötigt werden. Es ist eine OPTIONS-Anfrage wie die folgende.

OPTIONS /data HTTP/1.1

Herkunft: https://example.com

Access-Control-Request-Method: DELETE

Der Browser sendet die Preflight-Anfrage vor der eigentlichen Anforderungsnachricht. Der Server muss auf die Preflight-Anfrage mit Informationen über die ursprungsübergreifenden Anfragen antworten, die der Server von der Client-URL annehmen möchte. Die Server-Antwort-Header müssen Folgendes enthalten:

  • Methoden zur Zugriffskontrolle und zum Erlauben
  • Access-Control-Allow-Header
  • Access-Control-Allow-Origin

Ein Beispiel für eine Serverantwort finden Sie unten.

HTTP/1.1 200 OK

Access-Control-Allow-Header: Inhaltstyp

Access-Control-Allow-Origin: https://news.example.com

Methoden zur Zugriffskontrolle und Erlauben: GET, DELETE, HEAD, OPTIONS

Die Preflight-Antwort enthält manchmal einen zusätzlichen Access-Control-Max-Age-Header. Diese Metrik gibt die Dauer (in Sekunden) an, die der Browser benötigt, um Preflight-Ergebnisse im Browser zwischenzuspeichern. Caching ermöglicht es dem Browser, mehrere komplexe Anforderungen zwischen Preflight-Anfragen zu senden. Es muss keine weitere Preflight-Anfrage gesendet werden, bis die durch das maximale Alter angegebene Zeit abgelaufen ist.

 

Was ist der Unterschied zwischen CORS und JSONP?

JSON with Padding (JSONP) ist eine historische Technik, die die Kommunikation zwischen Webanwendungen ermöglicht, die auf verschiedenen Domänen laufen.

Mit JSONP verwenden Sie HTML-Skript-Tags auf der Client-Seite. Das Script-Tag lädt externe JavaScript-Dateien oder bettet JavaScript-Code direkt in eine HTML-Seite ein. Da Skripts nicht der Gleiche-Herkunft-Richtlinie unterliegen, können Sie ursprungsübergreifende Daten über den JavaScript-Code abrufen.

Die Daten müssen jedoch im JSON-Format vorliegen. Außerdem ist JSONP weniger sicher als ursprungsübergreifende gemeinsame Nutzung von Ressourcen (CORS), da es auf die Vertrauenswürdigkeit der externen Domäne angewiesen ist, um sichere Daten bereitzustellen.

Moderne Browser haben einige Sicherheitsfunktionen hinzugefügt, sodass älterer Code, der JSONP enthält, auf ihnen nicht mehr funktioniert. CORS ist der aktuelle globale Webstandard für herstellerübergreifende Zugriffskontrolle.

Lesen Sie mehr über JavaScript“

Mehr über JSON erfahren »

Was sind bewährte Methoden für CORS?

Folgendes sollten Sie beachten, wenn Sie ursprungsübergreifende gemeinsame Nutzung von Ressourcen (CORS) auf Ihrem Server konfigurieren.

Definieren Sie entsprechende Zugriffslisten

Es ist immer am besten, Zugriff auf einzelne Domänen mithilfe von kommagetrennten Listen zu gewähren. Vermeiden Sie die Verwendung von Platzhaltern, es sei denn, Sie möchten die API öffentlich machen. Andernfalls kann die Verwendung von Platzhaltern und regulären Ausdrücken zu Sicherheitslücken führen.

Angenommen, Sie schreiben einen regulären Ausdruck, der Zugriff auf alle Websites mit dem Suffix permitted-website.com gewährt. Mit einem Ausdruck gewähren Sie Zugriff auf api.permitted-website.com und news.permitted-website.com. Sie gewähren aber auch versehentlich Zugriff auf nicht autorisierte Websites, die möglicherweise Domänen wie maliciouspermitted-website.com verwenden.

Vermeiden Sie die Verwendung von Null-Ursprung in Ihrer Liste

Einige Browser senden den Wert Null im Anfrage-Header für bestimmte Szenarien wie Dateianfragen oder Anfragen vom lokalen Host.

Sie sollten den Nullwert jedoch nicht in Ihre Zugriffsliste aufnehmen. Es birgt auch Sicherheitsrisiken, da unbefugte Anfragen, die Null-Header enthalten, Zugriff erhalten können.

Wie kann AWS Ihre CORS-Anfragen unterstützen?

Viele unserer Services verfügen über eine integrierte Unterstützung für ursprungsübergreifende gemeinsame Nutzung von Ressourcen (CORS). So können Sie den ursprungsübergreifenden Zugriff auf Ihre APIs und Ressourcen kontrollieren, die auf Amazon Web Services (AWS) gehostet werden.

Hier sind einige AWS-Services mit CORS-Unterstützung:

  • Amazon Simple Storage Service (Amazon S3) ist ein Objektspeicherservice mit kostengünstigen Speicherklassen für alle Anwendungsfälle der Datenspeicherung. Mit Amazon S3 können Sie ein CORS-Konfigurationsdokument mit Regeln erstellen, die die Ursprünge angeben, die Sie für den Zugriff auf Ihre S3-Daten zulassen, die Operationen (HTTP-Methoden), die Sie für jeden Ursprung unterstützen, und andere betriebsspezifische Informationen. Sie können der Konfiguration bis zu 100 Regeln hinzufügen.
  • Amazon API Gateway ist ein vollständig verwalteter Service, der das Erstellen, Veröffentlichen, Warten, Überwachen und Sichern von APIs für Sie in jeder beliebigen Größenordnung vereinfacht. Sie können CORS für Ihre REST-APIs mit einem Klick direkt in der Amazon-API-Gateway-Konsole aktivieren.

Beginnen Sie mit APIs auf AWS, indem Sie noch heute ein Konto erstellen.

Nächste Schritte in AWS

Zusätzliche produktbezogene Ressourcen ansehen
Anwendungs-Integrationsservices ausprobieren 
Registrieren Sie sich für ein kostenloses Konto

Sie erhalten sofort Zugriff auf das kostenlose Kontingent von AWS.

Registrieren 
Mit der Entwicklung in der Konsole starten

Starten Sie mit der Entwicklung in der AWS-Managementkonsole.

Anmelden