Cross-Origin-Ressourcenfreigabe

Cross-Origin-Ressourcenfreigabe (CORS) ist ein Mechanismus, der eingeschränkt zulässt Ressourcen auf einen Website von einem anderen angefordert werden Domain außerhalb der Domäne, aus der die erste Ressource bedient wurde.[1]

Eine Webseite kann frei von Obst-Origin-Bildern einbetten, Stylesheets, Skripte, iframesund Videos.[2] Bestimmte "Cross-Domain" -Anfragen, insbesondere Ajax Anfragen sind standardmäßig von der verboten Sicherheitspolitik der gleichorientierten Sicherheit. CORS definiert eine Art und Weise, wie ein Browser und ein Server interagieren können, um festzustellen, ob es sicher ist, dass die Anforderung der Kreuzorientierung sicher ist.[3] Es ermöglicht mehr Freiheit und Funktionalität als rein gleichorientierte Anfragen, ist jedoch sicherer, als nur alle Cross-Origin-Anfragen zuzulassen.

Die Spezifikation für CORs ist Teil der Waswg's holen Living Standard.[4] Diese Spezifikation beschreibt, wie CORs derzeit in Browsern implementiert wird.[5] Eine frühere Spezifikation wurde als W3c Empfehlung.[6]


Weg von an Xmlhttprequest (Xhr) durch Kors.

Für ajax und HTTP -Anforderungsmethoden das kann Daten ändern (normalerweise HTTP POST Verwendung mit sicherem MIME Typen), die Spezifikation schreibt vor, dass Browser die Anforderung "vor dem Flug" "Preflight", um unterstützte Methoden des Servers mit einer HTTP -Optionsanforderungsmethode zu fordern, und dann nach "Genehmigung" vom Server die tatsächliche Anforderung mit der tatsächlichen HTTP -Anforderungsmethode senden. Server können Clients auch mitteilen, ob "Anmeldeinformationen" (einschließlich Cookies und HTTP -Authentifizierungsdaten) mit Anfragen gesendet werden sollen.[7]

Einfaches Beispiel

Angenommen, ein Benutzer besucht http://www.example.com und die Seite versucht eine Cross-Origin-Anfrage, die Daten des Benutzers von http://service.example.com zu holen. Ein CORS-kompatibler Browser versucht, eine Cross-Origin-Anfrage an service.example.com wie folgt zu stellen.

  1. Der Browser sendet die Get -Anfrage mit einem Extra Herkunft HTTP -Header an service.example.com mit der Domain, die der übergeordneten Seite bedient hat:
    Herkunft: http://www.example.com
  2. Der Server von service.example.com sendet eine dieser drei Antworten:
    • Die angeforderten Daten zusammen mit einem Zugangskontroll-Allow-Origin (ACAO) Header in seiner Antwort, die die Anforderungen des Ursprungs angeben, sind zulässig. Zum Beispiel sollte es in diesem Fall sein:
      Access-control-low-origin: http://www.example.com
    • Die angeforderten Daten zusammen mit einem Zugangskontroll-Allow-Origin (ACAO) Header mit einer Wildcard, die angibt, dass die Anfragen aller Domänen zulässig sind:
      Zugangskontroll-Allow-Origin: *
    • Eine Fehlerseite, wenn der Server keine Queroriginalanforderung zulässt

Eine Wildcard-Richtlinie der gleichen Ursprung ist angemessen, wenn eine Seite oder eine API-Antwort als vollständig öffentlicher Inhalt angesehen wird und für alle zugänglich ist, einschließlich eines jeden Code auf jeder Website. Eine frei verfügbare Webschrift auf einem öffentlichen Hosting -Service wie Google -Schriftarten ist ein Beispiel.

Eine Wildcard-gleichorientierte Politik wird auch weit verbreitet und angemessen in der Objektkapazitätsmodell, wo Seiten unbeschreibliche URLs haben und für jeden zugänglich sind, der das Geheimnis kennt.

Der Wert von "*" ist insofern von Bedeutung, da er keine Anfragen zur Lieferung von Anmeldeinformationen zulässt, was bedeutet, dass die HTTP-Authentifizierung, keine clientseitigen SSL-Zertifikate oder Cookies in der Cross-Domänen-Anforderung nicht zugegeben werden kann.[8]

Beachteservice.example.com), nicht der ursprüngliche Webanwendungsserver (www.example.com). Hier, service.example.com Verwendet CORs, um dem Browser zu ermöglichen, zu autorisieren www.example.com Anfragen zu stellen an service.example.com.

Wenn ein Standort den Header "Access-Control-Allow-Credentials: True" angibt, können Websites von Drittanbietern möglicherweise privilegierte Aktionen ausführen und vertrauliche Informationen abrufen. Auch wenn dies nicht der Fall ist, können Angreifer möglicherweise alle IP-basierten Zugriffskontrollen umgehen, indem sie durch die Browser der Benutzer eingesetzt werden.

Beispiel für Vorflug

Bei der Durchführung bestimmter Arten von Cross-Domain-AJAX-Anfragen führen moderne Browser, die CORs unterstützen, eine zusätzliche "Präflight" -Anforderung ein, um festzustellen, ob sie die Erlaubnis zur Durchführung der Aktion haben. Cross-Origin-Anfragen werden auf diese Weise vorgespeichert, da sie möglicherweise Auswirkungen auf Benutzerdaten haben.

Optionen/Host: service.example.com Ursprung: http://www.example.com Access-control-request-Method: Put

Wenn service.example.com bereit ist, die Aktion zu akzeptieren, kann sie mit den folgenden Headern reagieren:

Access-control-allow-origin: http://www.example.com access-control-allox-hods: put

Der Browser stellt dann die tatsächliche Anfrage. Wenn service.example.com keine seitenanfragen von diesem Ursprung annimmt, antwortet er mit einem Fehler auf die Optionsanforderung und der Browser stellt die tatsächliche Anfrage nicht.

Header

Die HTTP -Header, die sich auf CORs beziehen, sind:

Anfordern von Headern

  • Herkunft
  • Zugangskontroll-Request-Methode
  • Zugangskontroll-Request-Header

Reaktionsüberschriften

  • Zugangskontroll-Allow-Origin
  • Zugangskontroll-Allow-Kredite
  • Zugangskontroll-Expose-Header
  • Zugangskontroll-Max-Alter
  • Zugangskontroll-Bad-Methoden
  • Zugangskontroll-Allow-Header

Browserunterstützung

CORS wird von allen Browsern basierend auf den folgenden Layout -Motoren unterstützt:

Geschichte

Cross-Origin-Unterstützung wurde ursprünglich von Matt Oshhry, Brad Porter und Michael Bodell von vorgeschlagen Tellme Networks im März 2004 für die Aufnahme in VoiceXml 2.1[18] So können Sie sichere Datenanfragen von VoicexML-Browsern ermöglichen. Der Mechanismus wurde als allgemein angesehen und nicht spezifisch für VoicexML und anschließend in eine Implementierungsnote unterteilt.[19] Die WebApps -Arbeitsgruppe des W3C mit Teilnahme der großen Browser -Anbieter begann, die Notiz in a zu formalisieren W3C Arbeitsentwurf auf dem Weg zum formellen W3C -Empfehlung Status.

Im Mai 2006 wurde der erste W3C -Arbeitsentwurf eingereicht.[20] Im März 2009 wurde der Entwurf in "Cross-Origin-Ressourcenfreigabe" umbenannt.[21] Und im Januar 2014 wurde es als W3C -Empfehlung angenommen.[22]

CORS vs JSONP

CORs können als moderne Alternative zur JSONP Muster. Die Vorteile von CORs sind:

  • Während JSONP nur die unterstützt ERHALTEN Anforderungsmethode unterstützt auch andere Arten von HTTP -Anforderungen.
  • CORS ermöglicht es einem Webprogrammierer, regulär zu verwenden Xmlhttprequest, was eine bessere Fehlerbehandlung unterstützt als JSONP.
  • Während JSONP verursachen kann Cross-Site Scripting (XSS) Probleme Wenn die externe Site beeinträchtigt ist, ermöglicht CORs Websites, Antworten manuell zu analysieren, um die Sicherheit zu erhöhen.[3]

Der Hauptvorteil von JSONP war seine Fähigkeit, an Legacy -Browsern zu arbeiten, die vor CORS -Unterstützung (Unterstützung "(Opera Mini und Internet Explorer 9 und früher). CORS wird jetzt von den meisten modernen Webbrowsern unterstützt.[23]

Siehe auch

Verweise

  1. ^ a b c am 6. Juli 2009 von Arun Ranganathan (2009-07-06). "Cross-Site XMLHTTPrequest mit CORS ✩ Mozilla Hacks-The Web Developer Blog".Hacks.mozilla.org. Abgerufen 2012-07-05.
  2. ^ "Gleichorientierter Richtlinien- / Cross-Origin-Netzwerkzugriff". Mdn.
  3. ^ a b "Cross-Domain Ajax mit Cross-Origin-Ressourcenfreigabe". Nczonline. Abgerufen 2012-07-05.
  4. ^ "Living Standard" holen ".
  5. ^ "WebAppSec Arbeitsgruppe Minuten".
  6. ^ "Cross-Origin-Ressourcenfreigabe".
  7. ^ "Cross-Site XMLHTTPrequest mit CORs". Mozilla. Abgerufen 2012-09-05.
  8. ^ [1]. W3.org. Abgerufen am 2021-31-07.
  9. ^ a b "Blinken". Mackenblog. April 2013. Abgerufen 4. April 2013.
  10. ^ "Google geht seinen eigenen Weg, webkit Rendering Engine". ". ARS Technica. April 2013. Abgerufen 4. April 2013.
  11. ^ "HTTP Access Control (CORS) - MDN". Entwickler.mozilla.org. Archiviert von das Original Am 2010-05-27. Abgerufen 2012-07-05.
  12. ^ "Gecko - Mdn". Entwickler.mozilla.org. 2012-06-08. Abgerufen 2012-07-05.
  13. ^ Tony Ross; Progamm Manager; Internet Explorer (2012-02-09). "CORS für xhr in IE10". Msdn. Abgerufen 2012-12-14.
  14. ^ David Honneffer, Dokumentationsspezialist (2012-06-14). "12.00 für Unix Changelog". Oper. Archiviert von das Original Am 2012-06-18. Abgerufen 2012-07-05.
  15. ^ David Honneffer, Dokumentationsspezialist (2012-04-23). "Opera -Software: Webspezifikationen unterstützen in Opera Presto 2.10". Opera.com. Abgerufen 2012-07-05.
  16. ^ "59940: Apple Safari Webkit Cross-Origin-Ressourcenfreigabe-Bypass". Osvdb.org. Archiviert von das Original am 07.07.2012. Abgerufen 2012-07-05.
  17. ^ "Microsoft Edge Deverloper's Guide".
  18. ^ "Voice Extensible Markup Language (VoiceXML) 2.1". W3.org. 2004-03-23. Abgerufen 2012-07-05.
  19. ^ "Autorisieren Sie den Lesezugriff auf XML-Inhalte mithilfe der <? Access-Control?> Verarbeitungsanweisung 1.0". W3.org. Abgerufen 2012-07-05.
  20. ^ "Autorisieren Sie den Lesezugriff auf XML -Inhalte mithilfe der <? Access -Control?> Verarbeitungsanweisung 1.0 W3C - Arbeitsentwurf 17 Mai 2006". W3.org. Abgerufen 17. August 2015.
  21. ^ "Cross -Origin -Ressourcenfreigabe - W3C Working Draft 17. März 2009". W3.org. Abgerufen 17. August 2015.
  22. ^ "Cross -Origin -Ressourcenfreigabe - W3C Empfehlung 16. Januar 2014". W3.org. Abgerufen 17. August 2015.
  23. ^ "Wann kann ich ... Cross Origin Resource Sharing verwenden". caniuse.com. Abgerufen 2012-07-12.

Externe Links