Cross-Origin Resource Sharing (CORS) Konfiguration

Cross-Origin Resource Sharing (CORS) wird mithilfe von Access-Control-Allow-Origin und verwandten Headers gehandhabt. Access-Control-Allow-Origin definiert die Nicht-Gleicher-Ursprung (Non-Same-Origin), die berechtigt sind, Anfragen an Seiten auf Ihrer Domäne zu stellen (z.B. über XMLHttpRequest oder fetch()).

Problem

Standardmäßig blockiert die Same-Origin-Policy Cross-Origin HTTP-Anfragen, die durch Skripte initiiert werden. Es gibt mehrere Anwendungsfälle, die Cross-Origin-Skriptzugriff erfordern, zum Beispiel Content Delivery Networks (CDNs), die Hosting für JavaScript/CSS-Bibliotheken und öffentliche API Endpunkte bereitstellen. Allerdings stellt Cross-Origin-Zugriff ein großes Sicherheitsrisiko dar und muss sorgfältig kontrolliert werden.

Lösung

Verwenden Sie Access-Control-Allow-Origin, um die Nicht-Gleicher-Ursprung zu definieren, die berechtigt sind, Anfragen an Seiten auf Ihrer Domäne zu stellen.

Wenn vorhanden, sollte Access-Control-Allow-Origin die geringstmögliche Anzahl von Ursprüngen und Ressourcen angeben, die für das Funktionieren Ihrer Seite nötig sind. Beispielsweise, wenn Ihr Server sowohl eine Website als auch eine API bereitstellt, die für den Remote-XMLHttpRequest-Zugriff vorgesehen ist, sollten nur die API-Ressourcen den Access-Control-Allow-Origin Header zurückgeben.

Wenn Sie Access-Control-Allow-Origin nicht richtig setzen, können unautorisierte Ursprünge die Inhalte jeder Seite auf Ihrer Website lesen. Dies kann besonders gefährlich sein, wenn diese Seiten in der Lage sind, Anmeldedaten zu senden, was Ihre Website für CSRF-Angriffe anfällig machen könnte.

Wenn der Zugang mit Anmeldedaten von bestimmten Ursprüngen erforderlich ist, stellen Sie sicher, dass Access-Control-Allow-Origin nur auf diese Ursprünge gesetzt ist, anstatt den Origin Header zu spiegeln. Wenn ein öffentlicher, nicht authentifizierter Zugang nötig 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 Seite, 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