Nachdem ich über CORS (Cross-Origin Resource Sharing) gelesen habe, verstehe ich nicht, wie es die Sicherheit verbessert. Domänenübergreifende AJAX-Kommunikation ist zulässig, wenn der richtige ORIGIN-Header gesendet wird. Als Beispiel, wenn ich sende
HERKUNFT: http://example.com
Der Server prüft, ob diese Domäne in der Whitelist enthalten ist, und, falls vorhanden, den Header:
Access-Control-Allow-Origin: [URL hier erhalten]
wird zusammen mit der Antwort zurückgesendet (Dies ist der einfache Fall, es gibt auch vorgeforderte Anfragen, aber die Frage ist dieselbe).
Ist das wirklich sicher? Wenn jemand die Informationen erhalten möchte, scheint das Fälschen von ORIGIN-Headern eine wirklich triviale Aufgabe zu sein. Außerdem besagt der Standard, dass die Richtlinie im Browser erzwungen wird und die Antwort blockiert, wenn Access-Control-Allow-Origin nicht korrekt ist. Wenn jemand versucht, diese Informationen abzurufen, wird er offensichtlich keinen Standardbrowser verwenden, um sie zu blockieren.
quelle
Antworten:
Sie können einen Origin-Header nicht mit JavaScript in einem Webbrowser fälschen. CORS soll dies verhindern.
Außerhalb eines Webbrowsers spielt es keine Rolle. Es soll Menschen nicht davon abhalten, Daten zu erhalten, die der Öffentlichkeit zugänglich sind. Sie können es nicht der Öffentlichkeit zugänglich machen, ohne dass Mitglieder der Öffentlichkeit es erhalten.
Es ist so konzipiert, dass gegeben:
Wenn Bob Charlies Website besucht, kann Charlie JS nicht an Bobs Browser senden, damit er Daten von Alices Website abruft und an Charlie sendet.
Die obige Situation wird wichtiger, wenn Bob ein Benutzerkonto auf Alices Website hat, mit dem er beispielsweise Kommentare veröffentlichen, Daten löschen oder Daten anzeigen kann, die der Öffentlichkeit nicht zugänglich sind - da Charlie's JS ohne Schutz Bobs Browser informieren könnte um das hinter Bobs Rücken zu tun (und dann die Ergebnisse an Charlie zu senden).
Wenn Sie verhindern möchten, dass Unbefugte die Daten sehen, müssen Sie sie mit Kennwörtern, SSL-Client-Zertifikaten oder anderen Mitteln zur identitätsbasierten Authentifizierung / Autorisierung schützen.
quelle
Der Zweck ist es, dies zu verhindern -
Die Idee ist, dass die Website Ihrer Bank eine Möglichkeit benötigt, Ihrem Browser mitzuteilen, ob Skripten auf Website X für den Zugriff auf Seiten Ihrer Bank vertrauenswürdig sein sollten.
quelle
Access-Control-Allow-Origin
Header gibt an, welche Ursprünge (imOrigin
Header angegeben) auf die Ressource zugreifen dürfen. Normalerweise dürfen nur Anfragen mit demselben Ursprung dies tun. Der wichtigste Teil hier ist: Das Zulassen / Verweigern wird vom BROWSER erzwungen, nicht vom Server. Dies bedeutet, dass derAccess-Control-Allow-Origin
Ihren Browser schützt, nicht die Ressource auf dem Server oder den Server selbst.Nur um die Antwort von @jcoder hinzuzufügen, geht es im
Origin
Header nicht darum, die auf einem Server angeforderten Ressourcen zu schützen. Diese Aufgabe liegt auf andere Weise beim Server selbst, gerade weil ein Angreifer diesen Header tatsächlich mit den entsprechenden Tools fälschen kann.Der Zweck des
Origin
Headers besteht darin, den Benutzer zu schützen. Das Szenario ist das folgende:Ein Angreifer erstellt eine schädliche Website M.
Ein Benutzer Alice wird dazu verleitet, eine Verbindung zu M herzustellen, das ein Skript enthält, das versucht, einige Aktionen über CORS auf einem Server B auszuführen, der CORS tatsächlich unterstützt
B wird wahrscheinlich kein M in seiner
Access-Control-Allow-Origin
Kopfzeile haben, denn warum sollte es?Der Dreh- und Angelpunkt ist, dass M keine Möglichkeit hat, den
Origin
Header zu fälschen oder zu überschreiben , da die Anforderungen von Alices Browser initiiert werden. Ihr Browser setzt also (richtig)Origin
auf M, was nicht inAccess-Control-Allow-Origin
B ist, daher schlägt die Anfrage fehl.Alice könnte den
Origin
Header selbst ändern , aber warum sollte sie es tun, da dies bedeuten würde, dass sie sich selbst Schaden zufügt?TL; DR: Der
Origin
Header schützt den unschuldigen Benutzer. Es werden keine Ressourcen auf einem Server gesichert. Es kann von einem Angreifer auf seiner eigenen Maschine gefälscht werden, aber es kann nicht auf einer Maschine gefälscht werden, die nicht unter seiner Kontrolle steht.Server sollten ihre Ressourcen weiterhin schützen, da ein übereinstimmender
Origin
Header keinen autorisierten Zugriff bedeutet. EinOrigin
Header, der NICHT übereinstimmt, bedeutet jedoch einen nicht autorisierten Zugriff.quelle
Der Zweck derselben Ursprungsrichtlinie besteht nicht darin, Personen daran zu hindern, allgemein auf Website-Inhalte zuzugreifen. Wenn jemand das tun möchte, braucht er nicht einmal einen Browser. Der Punkt besteht darin, zu verhindern, dass Client-Skripte ohne die erforderlichen Zugriffsrechte auf Inhalte einer anderen Domäne zugreifen. Siehe Wikipedia-Eintrag für Same Origin Policy .
quelle
Nachdem ich über CORS gelesen habe, verstehe ich nicht, wie es die Sicherheit verbessert.
CORS verbessert die Sicherheit nicht. CORS bietet Servern einen Mechanismus, mit dem sie Browsern mitteilen können, wie fremde Domänen auf sie zugreifen sollen, und dies auf eine Weise, die mit dem vor CORS vorhandenen Browsersicherheitsmodell (nämlich der Richtlinie für denselben Ursprung ) übereinstimmt .
Die Same Origin Policy und CORS haben jedoch einen begrenzten Geltungsbereich. Insbesondere hat die CORS-Spezifikation selbst keinen Mechanismus zum Ablehnen von Anforderungen. Mithilfe von Headern kann der Browser angewiesen werden, dass eine Seite einer fremden Domain keine Antwort liest. Bei Preflight-Anfragen kann der Browser aufgefordert werden, bestimmte Anfragen von einer fremden Domain nicht zu senden. CORS gibt jedoch keine Möglichkeit für den Server an, eine tatsächliche Anforderung abzulehnen (dh nicht auszuführen).
Nehmen wir ein Beispiel. Ein Benutzer ist
A
über ein Cookie auf der Website angemeldet . Der Benutzer lädt eine schädliche SiteM
, die versucht, ein Formular zu senden, das einePOST
anA
. Was wird passieren? Nun, mit oder ohne CORS und mit oder ohneM
eine erlaubte Domain, sendet der Browser die AnfrageA
mit dem Autorisierungscookie des Benutzers an und der Server führt den böswilligen Vorgang aus,POST
als ob der Benutzer ihn initiiert hätte.Dieser Angriff wird als Cross-Site Request Forgery bezeichnet , und CORS selbst unternimmt nichts, um ihn zu mildern. Aus diesem Grund ist der CSRF-Schutz so wichtig, wenn Sie zulassen, dass Anforderungen Daten im Namen von Benutzern ändern.
Jetzt kann die Verwendung des
Origin
Headers ein wichtiger Bestandteil Ihres CSRF-Schutzes sein. In der Tat ist die Überprüfung Teil der aktuellen Empfehlung für eine mehrstufige CSRF-Verteidigung . Diese Verwendung desOrigin
Headers fällt jedoch nicht in die CORS-Spezifikation.Insgesamt ist CORS eine nützliche Spezifikation für die Erweiterung des vorhandenen Sicherheitsmodells der Same Origin Policy auf andere akzeptierte Domänen. Es erhöht die Sicherheit nicht, und Websites benötigen dieselben Verteidigungsmechanismen wie vor CORS.
quelle
Ich bin spät dran zu antworten, aber ich glaube nicht, dass ein Beitrag hier wirklich die gesuchte Antwort liefert. Der größte Vorteil sollte sein, dass der Browser der Agent ist, der den
origin
Header-Wert schreibt . Ein böses Skript kann denorigin
Header-Wert nicht schreiben . Wenn der Server mit einemAccess-Control-Allow-Origin
Header antwortet , versucht der Browser sicherzustellen, dass dieser Header denorigin
zuvor gesendeten Wert enthält . Wenn nicht, wird ein Fehler ausgelöst und der Wert nicht an das anfordernde Skript zurückgegeben. Die anderen Antworten auf diese Frage stellen ein gutes Szenario dar, wenn Sie eine Antwort auf das böse Skript ablehnen möchten.@daniel f bietet auch eine gute Antwort auf die Frage
quelle