Cross-Origin Resource Sharing (CORS) Konfiguration
Cross-Origin Resource Sharing (CORS) wird mit Hilfe von Access-Control-Allow-Origin und verwandten Headern gehandhabt. Access-Control-Allow-Origin definiert die nicht gleichen Ursprünge, die berechtigt sind, Anfragen an Seiten auf Ihrer Domain zu senden (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 einen Zugriff von skriptübergreifenden Quellen erfordern; zum Beispiel Content Delivery Networks (CDNs), die das Hosting für JavaScript/CSS-Bibliotheken und öffentliche API-Endpunkte bereitstellen. Jedoch stellt der 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 gleichen Ursprünge zu definieren, die berechtigt sind, Anfragen an Seiten auf Ihrer Domain zu senden.
Wenn vorhanden, sollte Access-Control-Allow-Origin die minimale Anzahl an Ursprüngen und Ressourcen angeben, die für das Funktionieren Ihrer Website notwendig sind. Wenn Ihr Server beispielsweise sowohl eine Website als auch eine API bereitstellt, die für den entfernten XMLHttpRequest-Zugriff gedacht ist, sollten nur die API-Ressourcen den Header Access-Control-Allow-Origin zurückgeben.
Wenn Access-Control-Allow-Origin nicht korrekt gesetzt wird, 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, Anmeldeinformationen zu senden, wodurch Ihre Website potenziell CSRF-Angriffen ausgesetzt wird.
Wenn ein authentifizierter Zugriff von bestimmten Ursprüngen erforderlich ist, stellen Sie sicher, dass Access-Control-Allow-Origin nur auf diese Ursprünge gesetzt wird, anstatt den Origin-Header zu spiegeln. Wenn öffentlicher, nicht authentifizierter Zugriff 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 Website, den Inhalt einer JavaScript-Bibliothek zu lesen:
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:
Access-Control-Allow-Origin: https://random-dashboard.example.org
Siehe auch
Access-Control-Allow-OriginAccess-Control-Allow-CredentialsAccess-Control-Allow-HeadersAccess-Control-Allow-MethodsAccess-Control-Expose-HeadersAccess-Control-Max-AgeAccess-Control-Request-HeadersAccess-Control-Request-MethodOrigin- Cross-Origin Resource Sharing (CORS)
- CORS for Developers von W3C (2016)