Ich bin ziemlich neu in der Web-Sicherheit, und als ich mehr über die verschiedenen Angriffsvektoren lese, schreckt meine Meinung, dass sie in erster Linie erlaubt sind. Es ist so, als ob das Internet mit einem kaputten Sicherheitsmodell entworfen wurde und anfällig wäre.Warum erlauben Browser CSRF?
Ich bin auch erstaunt über die Menge an vagen und ungenauen Informationen. Zum Beispiel klingt die Single Origin Policy zunächst ziemlich gut, dann habe ich gelesen, dass sie nur für XHR gilt und achtet übrigens nicht auf XHR-Ursprungs-POST, das ist der klassische CSRF-Angriff. Ich bin froh, dass ich weiter gelesen habe.
Es gibt auch einen Origin-Header, den der Server verwenden kann, um sicherzustellen, dass die Anfrage von der richtigen Stelle kommt - aber oops, ist es in den Browsern inkonsistent eingestellt, und wenn es nicht festgelegt ist, können Sie nicht sein ganz sicher, ob es wegen einer Anfrage mit demselben Ursprung oder einem Anforderungstyp war, der es nur für bestimmte Browser nicht bekommen hat (vielleicht ein IMG-Tag?). Weiter lesen.
So die richtig Weg scheint ein CSRF-Token in der Session-Cookie gesetzt werden, und auch das Token zu Formen/Links hinzufügen, und vergleichen Sie sie dann Server-Seite auf eine Vorlage. In der Theorie (und lassen Sie alle XSS-Angriffe für den Zweck dieser Frage ausschließen), kann ein CSRF-Versuch von einem anderen Tab eine POST-Anfrage an ein Formular machen, das den Cookie enthält, aber ohne ein Formulareingabeelement, das auf das passende Token gesetzt ist kann das Token nicht aus dem Cookie lesen), so dass der Server die Anfrage ablehnt. Funktioniert aber kludgy, und vergessen Sie nie, zu überprüfen!
Halten Sie diese Gedanken im Kopf für ein zweiten, hier ist meine Frage - warum der Browser des Session-Cookie in einer Anforderung senden, die von einer Seite stammt, die nicht der Ursprung des Cookie?
ich meine, Browser Cookies ablehnen - verschiedenen Domains aus gutem Grund zu senden, aber sind sehr glücklich, sie von unterschiedlicher Herkunft zu schicken? Würden die Sachen kaputt gehen, wenn sie es nicht würden? Wäre es eine robuste Verteidigung gegen CSRF, da Server nur das tun müssten, was sie gerade tun - nach einem gültigen Session-Cookie suchen?
Edit: Vielleicht ist dies ein Versuch, die Situation zu verbessern? https://tools.ietf.org/html/draft-west-origin-cookies-01
Eine Menge Zeug würde brechen. Zum Beispiel all diese Analyse- und Werbungsskripte. – Thilo
Es ist nicht so, als wären Browser vom ersten Tag an dazu gedacht, CSRF * zuzulassen. CSRF wurde später entdeckt, an einem Punkt, wo es bereits viele Webseiten gab. Definitiv mehr als zehn. Das Ändern der Regeln im Nachhinein und das Erwarten, dass sich jede Website ändert, um den Regeländerungen Rechnung zu tragen, erwartet eine Menge - vor allem, wenn eine * Menge * von Cross-Site-Anfragen * keine * schädlichen, nur wünschenswerte Auswirkungen haben kann. –
Es ist irgendwie irrelevant. Eine Website ist dafür verantwortlich, sich selbst zu schützen, NICHT auf "richtig" entworfene/entwickelte/gepflegte Browser angewiesen zu sein. Deshalb ist das CSRF-Token (auch wenn es kludgy ist) notwendig.Ich empfehle den Aufbau von CSRF in der Website-Architektur (oder verwenden Sie ein Framework, das es bereits hat). Auf diese Weise ist es immer da und immer überprüft (vorausgesetzt, Sie verwenden das Framework korrekt) – LaJmOn