Frage

Nachdem ich über CORs (Cross-Origin-Ressourcen-Sharing) gelesen habe, verstehe ich nicht, wie es die Sicherheit verbessert. Cross-Domain Ajax-Kommunikation ist zulässig, wenn der richtige Ursprungs-Header gesendet wird. Als Beispiel, wenn ich sende

URSPRUNG: http://example.com

Der Server prüft, ob sich diese Domäne in der weißen Liste befindet und, falls dies der Fall ist, Header:

Access-Control-Allow-Origin: [hier erhaltene URL hier

wird zusammen mit der Antwort zurückgesandt (dies ist der einfache Fall, es gibt auch vorliegende Anfragen, aber die Frage ist dieselbe).

Ist das wirklich sicher? Wenn jemand die Informationen erhalten möchte, scheint es eine wirklich triviale Aufgabe zu sein, einen Ursprungs -Header zu fälschen. Auch der Standard sagt, dass die Richtlinie im Browser durchgesetzt wird, wodurch die Antwort blockiert wird, wenn der Zugriffskontroll-Owl-Origin nicht korrekt ist. Wenn jemand versucht, diese Informationen zu erhalten, wird er natürlich keinen Standard -Browser verwenden, um sie zu blockieren.

War es hilfreich?

Lösung

Sie können einen Origin -Header mit JavaScript in einem Webbrowser nicht fälschen. CORS soll dies verhindern.

Außerhalb eines Webbrowsers spielt es keine Rolle. Es ist nicht so konzipiert, dass Personen daran gehindert werden, Daten zu erhalten, die der Öffentlichkeit zur Verfügung stehen. Sie können es nicht der Öffentlichkeit aussetzen, ohne dass Mitglieder der Öffentlichkeit es bekommen.

Es ist so konzipiert, dass gegeben wurde:

  • Alice, eine Person, die eine API zur Verfügung stellt, die über Ajax zugegriffen werden soll
  • Bob, eine Person mit einem Webbrowser
  • Charlie, ein Dritter, der eine eigene Website leitet

Wenn Bob die Website von Charlie besucht, kann Charlie JS nicht an Bobs Browser senden, sodass er Daten von der Alice -Website abholt und sie an Charlie sendet.

Die obige Situation wird wichtiger, wenn Bob über ein Benutzerkonto auf der Website von Alice verfügt, mit dem er Dinge wie Post -Kommentare, Löschen oder Daten löschen oder Daten anzeigen kann nicht Erhältlich für die breite Öffentlichkeit - da Charlies JS Bobs Browser ohne Schutz hinter Bobs Rücken (und dann die Ergebnisse an Charlie senden) sagen könnte.

Wenn Sie nicht autorisierte Personen daran hindern möchten, die Daten zu sehen, müssen Sie sie mit Passwörtern, SSL-Client-Zertifikaten oder anderen Mitteln der identitätsbasierten Authentifizierung/Autorisierung schützen.

Andere Tipps

Der Zweck ist es, dies zu verhindern -

  • Sie gehen zur Website x
  • Der Autor der Website X hat ein böses Skript geschrieben, das an Ihren Browser gesendet wird
  • Das Skript, das auf Ihrem Browser ausgeführt wird, meldet sich auf Ihrer Bankwebsite an und macht böse Dinge und weil es ausgeführt wird wie du In Ihrem Browser hat es die Erlaubnis, dies zu tun.

Die Ideen sind, dass die Website Ihrer Bank einen Weg benötigt, um Ihrem Browser mitzuteilen, ob Skripte auf der Website X vertraut werden sollten, um auf Seiten Ihrer Bank zugreifen zu können.

Nur um die Antwort von @jcoder hinzuzufügen, der springende Punkt der Origin Header kann nicht die auf einem Server angeforderten Ressourcen schützen. Diese Aufgabe liegt bei dem Server selbst über andere Weise genau, weil ein Angreifer diesen Header tatsächlich mit den entsprechenden Tools fälschen kann.

Der Punkt der Origin Header soll den Benutzer schützen. Das Szenario ist Folgendes:

  • Ein Angreifer erstellt eine böswillige Website m

  • Ein Benutzer Alice wird dazu gebracht, eine Verbindung zu M herzustellen, die ein Skript enthält, das versucht, einige Aktionen über CORs auf einem Server B auszuführen, das CORs tatsächlich unterstützt

  • B wird wahrscheinlich nicht m in seinem haben Access-Control-Allow-Origin Header, denn warum sollte es das?

  • Der entscheidende Punkt ist, dass M keine Mittel hat, um das zu fälschen oder zu überschreiben Origin Header, weil die Anfragen vom Browser von Alice initiiert werden. Ihr Browser setzt also die (richtig) Origin zu m, was nicht in der ist Access-Control-Allow-Origin von b, daher wird die Anfrage fehlschlagen.

Alice könnte die verändern Origin Header selbst, aber warum sollte sie, da es bedeuten würde, dass sie sich selbst schadet?

Tl; dr: die Origin Header schützt den unschuldigen Benutzer. Es sichert keine Ressourcen auf einem Server. Es ist fähig von einem Angreifer auf seiner eigenen Maschine, aber es kann nicht auf einer Maschine gefälscht werden, die nicht unter seiner Kontrolle ist.

Server sollten ihre Ressourcen immer noch als Matching schützen Origin Header bedeutet keinen autorisierten Zugang. Allerdings a Origin Header, der nicht übereinstimmt, bedeutet einen nicht autorisierten Zugriff.

Der Zweck der gleichen Ursprungsrichtlinie besteht darin, Personen davon abzuhalten, allgemein auf den Inhalt auf Website -Inhalte zuzugreifen. Wenn jemand das tun will, brauchen er nicht einmal einen Browser. Der Punkt ist zu stoppen Client -Skripte Zugriff auf Inhalte auf einer anderen Domäne ohne die erforderlichen Zugriffsrechte. Siehe den Wikipedia -Eintrag für Gleiche Ursprungsrichtlinie.

Nachdem ich über CORs gelesen habe, verstehe ich nicht, wie es die Sicherheit verbessert.

CORS verbessert die Sicherheit nicht. CORS bietet Servern einen Mechanismus, um Browsern zu sagen, wie sie von Fremdkörpern zugegriffen werden sollten, und es versucht, dies auf eine Weise zu tun, die mit dem vor CORS existierenden Browser -Sicherheitsmodell übereinstimmt (nämlich das Gleiche Ursprungsrichtlinie).

Aber die gleiche Ursprungsrichtlinie und die gleichen CORs haben einen begrenzten Umfang. Insbesondere die CORS -Spezifikation selbst hat keinen Mechanismus zur Ablehnung von Anforderungen. Es kann mit den Headers mit dem Browser informiert werden, dass er eine Seite nicht von einer Fremddomäne eine Antwort lesen lassen soll. Und bei Vorfluganfragen kann der Browser aufgefordert werden, ihm bestimmte Anfragen nicht von einer Fremddomäne zu senden. CORS gibt jedoch keine Mittel an, damit der Server eine tatsächliche Anforderung ablehnt (dh nicht ausführen).

Nehmen wir ein Beispiel. Ein Benutzer ist auf der Website angemeldet A über einen Keks. Der Benutzer lädt böswillige Site M, was versucht, ein Formular einzureichen, das a macht POST zu A. Was wird passieren? Nun, mit oder ohne Kors und mit oder ohne M Als erlaubte Domain sendet der Browser die Anfrage an an die Anfrage A Mit dem Autorisierungs -Cookie des Benutzers führt der Server die böswillige Ausführung aus POST Als ob der Benutzer es initiert hätte.

Dieser Angriff heißt Cross-Site-Anfragefälschung, und Cors selbst tut nichts, um es zu mildern. Aus diesem Grund sind CSRF -Schutzmaßnahmen so wichtig, wenn Sie Anfragen zum Ändern von Daten im Namen der Benutzer zulassen.

Nun die Verwendung der Origin Der Header kann ein wichtiger Bestandteil Ihres CSRF -Schutzes sein. In der Tat ist es Teil der Aktuelle Empfehlung für eine mehrstufige CSRF-Verteidigung. Aber diese Verwendung der Origin Der Kopf liegt außerhalb der CORS -Spezifikation.

Insgesamt ist CORS eine nützliche Spezifikation für die Erweiterung des vorhandenen Sicherheitsmodells für Ursprungsrichtlinien auf andere akzeptierte Domänen. Es fügt keine Sicherheit hinzu, und Websites benötigen die gleichen Arten von Abwehrmechanismen, die sie vor CORS gemacht haben.

Ich bin zu spät, um zu antworten, aber ich glaube nicht, dass ein Beitrag hier wirklich die gesuchte Antwort liefert. Das größte Mitnehmen sollte sein, dass der Browser der Agent ist, der das schreibt origin Kopfwert. Ein böses Drehbuch kann das nicht schreiben origin Kopfwert. Wenn der Server mit einem reagiert Access-Control-Allow-Origin Header versucht der Browser, sicherzustellen, dass dieser Header die enthält origin Wert früher gesendet. Wenn nicht, löst es einen Fehler aus und gibt den Wert nicht wieder an das Anforderungsskript zurück. Die anderen Antworten auf diese Frage zeigen ein gutes Szenario, wenn Sie eine Antwort auf das böse Drehbuch zurückführen möchten.

@Daniel F gibt auch eine gute Antwort auf die Frage

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top