Cross-Origin Resource Sharing
Cross-Origin Resource Sharing (CORS), deutsch: „Ursprungsübergreifende Ressourcenfreigabe“, ist ein Mechanismus, der Webbrowsern oder auch anderen Webclients Cross-Origin-Requests ermöglicht.<ref>Arbeitsvorlage des W3C, Stand 16. Januar 2014 (englisch)</ref> Zugriffe dieser Art sind normalerweise durch die Same-Origin-Policy (SOP) untersagt. CORS ist ein Kompromiss zugunsten größerer Flexibilität im Internet unter Berücksichtigung möglichst hoher Sicherheitsmaßnahmen.
Schutzziel
Die SOP und die CORS-Regeln schützen die Ressourcen eines Webservers vor unerwünschten Zugriffen durch Browser, die sich im Kontext einer anderen Domain befinden. Das bedeutet: Durch CORS reglementiert der Betreiber eines Webservers den Zugriff auf dessen Ressourcen – also z. B. Daten, die der Server über eine Web-Schnittstelle verfügbar macht. Der Betreiber des Servers kann durch CORS Ausnahmen für Domains erstellen, aus deren Kontext der Browserzugriff möglich sein soll. Browser, die sich auf kompromittierten oder bösartigen Webseiten befinden, lehnen bei richtiger CORS-Konfiguration den Zugriff auf den fremden Server ab. Die Durchsetzung der Schutzziele anhand der vom angefragten Server definierten CORS-Regeln obliegt also dem Browser.<ref>Testing Cross Origin Resource Sharing. OWASP Foundation, abgerufen am 6. Mai 2025.</ref><ref name="mdn">Cross-Origin Resource Sharing (CORS). In: Mozilla Developer Network. Abgerufen am 6. Mai 2025.</ref>
Dadurch schützen die Browser ihre Benutzer davor, dass fremde Webseiten über den Browser des Benutzer auf Ressourcen zugreifen, die nicht für sie gedacht sind. Das trägt dazu bei, die Vertraulichkeit, Integrität und Verfügbarkeit der geschützten Ressourcen auf dem Server zu schützen.
Funktionsweise
Die Einschränkungen, die durch die SOP auferlegt sind, können vom jeweiligen Server, der angefragt wird, für bestimmte Clients aufgehoben werden.
Damit die Anfrage eines Skripts auf einer Webseite, z. B. http://foo.example, an einen Server einer abweichenden Domain, z. B. http://bar.example, erfolgreich durchgeführt werden kann, muss der referenzierte Server bei seiner Antwort den Zugriff durch entsprechende HTTP-Header erlauben.
Sendet bar.example den unten aufgeführten Header Access-Control-Allow-Origin, so erlaubt er dem Skript vom Server foo.example den Zugriff auf Ressourcen, die auf ihm (bar.example) gespeichert sind. Ein Cross-Origin-Request kann somit erfolgreich durchgeführt werden. Zugriffe auf andere Server werden aufgrund der SOP weiterhin nicht erfolgreich durchgeführt.
HTTP-Header, gesetzt durch den Server bar.example (Beispiel):
Access-Control-Allow-Origin: http://foo.example
Weitere Access-Control-*-Header können das Zugriffsverhalten zusätzlich einschränken und die Sicherheit somit erhöhen, um den Server vor unberechtigten Anfragen zu schützen.
CORS-Ressource, die ausschließlich über die HTTP-GET Methode erreichbar ist:
Access-Control-Allow-Methods: GET
Browser-Unterstützung
CORS wird von folgenden Rendering-Engines unterstützt:
- Gecko 1.9.1+ (Mozilla Firefox 3.5+<ref name="mdn" />, SeaMonkey 2.0+<ref name="gecko_vers">Gecko. In: Mozilla Developer Network. Archiviert vom Vorlage:IconExternal am 3. August 2012; abgerufen am 15. März 2024.</ref>).
- WebKit (Apple Safari 4+,<ref name="mozhacks_cors">cross-site xmlhttprequest with CORS. In: Mozilla Hacks – the Web developer blog. Abgerufen am 2. Juni 2015.</ref> Google Chrome 3+<ref><templatestyles src="Webarchiv/styles.css" />Der Wert des Parameters
archive-todaymuss ein Datum der Form YYYYMMDD oder Zeitstempel der Form YYYY.MM.DD-hhmmss bzw. YYYYMMDDhhmmss sein.</ref>) - MSHTML/Trident 4.0+ (Internet Explorer 10+<ref>MSDN Blogs. In: blogs.msdn.com. Abgerufen am 2. Juni 2015.</ref>, Internet Explorer 8 und 9 bieten teilweise Unterstützung durch das XDomainRequest-Objekt.<ref name="mozhacks_cors" />)
- Presto 2.10.232+<ref>Opera Software: Web specifications support in Opera Presto 2.10. Abgerufen am 2. Juni 2015.</ref> (Opera 12+<ref>Dev.Opera – Hello Opera 12! In: dev.opera.com. Abgerufen am 2. Juni 2015.</ref>)
CORS vs. JSONP
CORS kann als Alternative für JSONP genutzt werden. Während JSONP nur GET-Anfragen unterstützt, bietet CORS auch Unterstützung für andere HTTP-Anfragen. Mit der Verwendung von CORS ist es Webentwicklern möglich, normale XMLHttpRequests bzw. die JavaScript Fetch API zu benutzen, die eine bessere Fehlerbehandlung als JSONP bieten. Auf der anderen Seite wird JSONP auch von Browsern unterstützt, die keine CORS-Unterstützung bieten.
Einzelnachweise
<references />
Weblinks
- Enable CORS (englisch)
- Mozilla Developer Network – Referenz mit Beispielen (englisch)
- CORS im Zusammenhang mit CDNs (englisch)