Cross-Origin Resource Sharing (CORS) Konfiguration

Cross-Origin Resource Sharing (CORS) wird mit Hilfe der Header Access-Control-Allow-Origin und verwandter Header gehandhabt. Access-Control-Allow-Origin definiert die nicht gleichartigen Ursprünge, die Anfragen an Seiten auf Ihrer Domain stellen dürfen (z. B. über XMLHttpRequest oder fetch()).

Problem

Standardmäßig blockiert die same-origin policy von Skripten initiierte, ursprungsübergreifende HTTP-Anfragen. Es gibt mehrere Anwendungsfälle, die den Zugriff auf ursprungsübergreifende Skripte erfordern; zum Beispiel Content Delivery Networks (CDNs), die Hosting für JavaScript/CSS-Bibliotheken und öffentliche API-Endpunkte bereitstellen. Ursprungsübergreifender Zugriff stellt jedoch ein erhebliches Sicherheitsrisiko dar und muss sorgfältig kontrolliert werden.

Lösung

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

Falls vorhanden, sollte Access-Control-Allow-Origin die kleinstmögliche Anzahl von Ursprüngen und Ressourcen spezifizieren, damit Ihre Website funktioniert. Wenn Ihr Server beispielsweise sowohl eine Website als auch eine API bereitstellt, die für den Remote-XMLHttpRequest-Zugang vorgesehen ist, sollten nur die API-Ressourcen den Header Access-Control-Allow-Origin zurückgeben.

Ein Versäumnis, Access-Control-Allow-Origin richtig zu setzen, ermöglicht unautorisierten Ursprüngen, die Inhalte jeder Seite auf Ihrer Website zu lesen. Dies kann besonders gefährlich sein, wenn diese Sites in der Lage sind, Anmeldedaten zu senden, was Ihre Seite potenziell CSRF-Angriffen aussetzen könnte.

Wenn der Zugriff auf Anmeldedaten von bestimmten Ursprüngen erforderlich ist, stellen Sie sicher, dass Access-Control-Allow-Origin nur auf diese Ursprünge gesetzt ist, anstatt den Header Origin widerzuspiegeln. Wenn ungeprüfter öffentlicher Zugang erforderlich ist, setzen Sie Access-Control-Allow-Origin auf * und lassen Sie den Header Access-Control-Allow-Credentials weg. Andernfalls lassen Sie beide Header weg.

Beispiele

Erlauben Sie jeder Site, 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