Einfaches Beispiel dafür, warum die same-Origin-Richtlinie erforderlich ist
Hab ich überlesen Same Origin Policy
, aber für ein besseres Verständnis von der Sache: könnte jemand bitte schreiben Sie einen einfachen code (in irgendeiner Sprache), die demonstrieren wird, ein Angriff, der SOP hält?
Wie war es möglich, jemanden angreifen, bevor SOP zustande kam?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Javascript-code änderungen der action-Eigenschaft (Ziel, in einer Angelegenheit zu sprechen), so dass, wenn Sie das Formular abschicken, senden Sie Ihre Anmeldeinformationen für mich, nicht Ihrer bank.
Wenn ich ein PHP-Skript auf meinem server, der leitet Sie zu Ihrer bank, die Sie nicht einmal bemerken.
Mit same-Origin-Policy, ist dieser Angriff nicht möglich. Eine Seite auf meiner domain nicht Lesen oder ändern des Inhalts der website der bank.
https://yourbank.com
der Angreifer irgendwie bekommt der Benutzer zu besuchenhttp://mysite.co
, die der Angreifer kontrolliert. Der Angreifer hat die Wahl seiner tricks zu überzeugen, die Benutzer, die nicht bemerken, die URL seiner Website legitim ist. Keine Notwendigkeit, ein iframe: einfach kopieren und fügen Sie den code aus der echten Seite. Das heißt, viele Banken hinzufügen von Benutzer-bestimmten Bild oder Wort vor Fragen nach dem Passwort, in dem Fall einschränken, iframes Mehrwert.Angriff Beispiel 1: Cross-Site Request Forgery (CSRF) mit einem HTML-Formular
Seite an
evil.com
den Angreifer gestellt hat:Ohne weitere Sicherheitsmaßnahmen würde, wäre dieser:
bank.com
welches Protokoll Sie inEs ist der synchronizer token pattern, allein, sogar ohne die SOP verhindert, dass diese von der Arbeit.
Synchronizer token pattern
Für jedes Formular auf
bank.com
die Entwickler erzeugen eine einmalige zufällige Folge als hidden-parameter, und nehmen nur die Anfrage, wenn der server ruft den parameter.E. g., Rails-HTML-Helfer automatisch hinzufügen eines
authenticity_token
- parameter auf der HTML, so dass der legitime form Aussehen würde:erwähnt: Das Verständnis der Schienen Authenticity Token
Also, wenn
evil.com
einen Beitrag einzelne Anfrage, er würde nie erraten, dass der token und der server würde ablehnen der Transaktion!!!Siehe auch: synchronizer token pattern auf OWASP.
Angriff 2. Beispiel: Cross-Site Request Forgery (CSRF) mit JavaScript AJAX
Aber dann, was verhindert, dass die
evil.com
von 2 requests mit JavaScript, genauso wie eine legitime browser tun würde:so
evil.com
versuchen würde, so etwas (jQuery, weil faul):Diese ist, wo die SOP ins Spiel kommt. Obwohl die
$.get
und$.post
tatsächlich senden Sie die authentifizierte Anfrage genau wie das HTML-Formular, die Absender-browser verhindert, dass der JavaScript-code beim Lesen der HTML-Antwort zurück, weil die Anfrage gesendet wurde auf eine separate domain!Der Chromium-Entwickler-Konsole zeigt einen Fehler an, für den es der Typ:
wurde gefragt: Warum funktioniert mein JavaScript-code wird ein "Nein" Access-Control-Allow-Origin' - header vorhanden ist, auf die angeforderte Ressource" Fehler beim Briefträger nicht?
Warum nicht, nur nicht senden cross request-cookies statt?
Frage ich mich: was aber, wenn Implementierungen hatte eine Regel wie: "Erlaube jedem request, sondern senden nur cookies der aktuellen domain XHR"?
Aber das würde immer noch erlauben, für eine andere Art des Angriffs: wenn die Authentifizierung basiert nicht auf cookies, sondern auf die Quelle (IP) der Anfrage.
Beispielsweise, Sie sind in das intranet Ihres Unternehmens und von dort aus können Sie Zugriff auf einen internen server, der nicht von außen sichtbar und dient geheime Daten.
Sind alle cross-origin-requests verboten?
Sogar vergessen, CORS, keine, das tun wir jeden Tag!
Vom MDN:
Cross-origin schreibt, sind in der Regel zulässig: links, Weiterleitungen und form-Beiträge.
Cross-origin-Einbettung ist in der Regel zulässig: Bilder, externe CSS und Javascript, iframes.
Cross-origin liest sind in der Regel nicht erlaubt: XHR (Beispiel oben)
iframe
Lesen.Jedoch lese-Zugriff ist oft undicht durch einbetten. Zum Beispiel können Sie die Breite und Höhe eines Bildes, die Aktionen von ein eingebettetes Skript oder die Verfügbarkeit eingebettete Ressource (und damit möglicherweise, wenn der Benutzer angemeldet ist oder nicht auf eine bestimmte Domäne)
Anderen Präventions-Ansätze
X-Requested-With
:Origin
header: https://security.stackexchange.com/questions/91165/why-is-the-synchronizer-token-pattern-preferred-over-the-origin-header-check-toSiehe auch: