Cross-Origin Resource Sharing (CORS)-Konfiguration

Cross-Origin Resource Sharing (CORS) wird mittels Access-Control-Allow-Origin und verwandter Header gehandhabt. Access-Control-Allow-Origin definiert die nicht selben Ursprünge, die berechtigt sind, Anfragen an Seiten auf Ihrer Domain zu stellen (d.h. über XMLHttpRequest oder fetch()).

Problem

Standardmäßig blockiert die Same-Origin-Policy von Skripten initiierte Cross-Origin-HTTP-Anfragen. Es gibt mehrere Anwendungsfälle, die den Zugriff von Skripten über Ursprungsgrenzen hinweg erfordern; zum Beispiel Content Delivery Networks (CDNs), die das Hosting für JavaScript/CSS-Bibliotheken und öffentliche API-Endpunkte bereitstellen. Jedoch stellt der Zugriff über Ursprungsgrenzen ein erhebliches Sicherheitsrisiko dar und muss sorgfältig kontrolliert werden.

Lösung

Verwenden Sie Access-Control-Allow-Origin, um die nicht selben Ursprünge zu definieren, die berechtigt sind, Anfragen an Seiten auf Ihrer Domain zu stellen.

Falls vorhanden, sollte Access-Control-Allow-Origin die minimale Anzahl an Ursprüngen und Ressourcen spezifizieren, die für die Funktion Ihrer Seite notwendig sind. Zum Beispiel, wenn Ihr Server sowohl eine Webseite als auch eine API bereitstellt, die für Remote-XMLHttpRequest-Zugriffe bestimmt ist, sollten nur die API-Ressourcen den Access-Control-Allow-Origin-Header zurückgeben.

Wenn Access-Control-Allow-Origin nicht richtig eingestellt ist, können unautorisierte Ursprünge die Inhalte jeder Seite auf Ihrer Seite lesen. Dies kann besonders gefährlich sein, wenn diese Seiten in der Lage sind, Anmeldedaten zu senden, was Ihre Seite potentiell CSRF-Angriffen aussetzen könnte.

Falls ein beglaubigter Zugriff von bestimmten Ursprüngen erforderlich ist, stellen Sie sicher, dass Access-Control-Allow-Origin nur auf diese Ursprünge gesetzt ist und nicht den Origin-Header widerspiegelt. Falls ein öffentlicher nicht beglaubigter Zugriff erforderlich ist, setzen Sie Access-Control-Allow-Origin auf * und lassen Sie den Access-Control-Allow-Credentials-Header weg. Andernfalls lassen Sie beide Header weg.

Beispiele

Erlauben Sie jeder Webseite, die Inhalte einer JavaScript-Bibliothek zu lesen:

http
Access-Control-Allow-Origin: *

Hinweis: Diese Einstellung ist erforderlich, damit die Subresource Integrity funktioniert.

Erlauben Sie https://random-dashboard.example.org, die zurückgegebenen Ergebnisse einer API zu lesen:

http
Access-Control-Allow-Origin: https://random-dashboard.example.org

Siehe auch