Welchen Risiken setze ich mich genau aus, wenn ich in meinen Formularen keine csrf-Token verwende? Ich bin nicht auf der Suche nach einfachen Bezeichnungen oder Namen für die Risiken, da diese verwirrend sein können. Ich muss verstehen, was genau ein Angreifer tun kann und nur unter welchen Umständen er dies tun kann, und zwar in einfachem Englisch.
Antworten
Zu viele Anzeigen?Eine CSRF-Schwachstelle ermöglicht es einem böswilligen Benutzer (oder einer Website), einen ahnungslosen Benutzer dazu zu bringen, eine Aktion auf Ihrer Website auszuführen, die er nicht beabsichtigt hat.
Einige Beispiele aus der Praxis: Wenn Sie einem Benutzer erlauben, ein Konto über GET statt über POST zu löschen, könnte jemand folgenden Kommentar auf Ihrer Website veröffentlichen (vorausgesetzt, die Website bietet eine Möglichkeit, Kommentare oder andere Eingaben zu veröffentlichen usw.)
Ich dachte, ich würde einen Kommentar zu Ihrer Website abgeben. Schau dir dieses coole Bild an!
<img src='http://example.com/delete\_my\_account.php" />
Und nun wird jedes Mal, wenn ein angemeldeter Benutzer diese Seite aufruft, sein Konto gelöscht. Wenn dies über POST statt über GET geschehen würde, könnte jemand ein Formular erstellen und die Benutzer dazu bringen, es abzuschicken, und das gleiche Ergebnis würde eintreten. Bei Verwendung eines CSRF-Tokens wäre dies jedoch nicht möglich.
Ein anderes Beispiel wäre, dass eine externe Website ein Formular erstellen könnte, das an Ihre Website POSTet und eine unerwünschte Aktion ausführt. Nehmen wir an, Ihre Website hat einen Einkaufswagen, der keine CSRF-Tokens verwendet. Eine böswillige Website könnte ein Formular mit einer Schaltfläche erstellen, auf der steht: "Klicken Sie hier, um sich zu registrieren", tatsächlich aber 1000 Stück von Ihrer Website bestellen. Wenn ein eingeloggter Benutzer Ihrer Website diese bösartige Website besucht und auf die Schaltfläche klickt, erhält er eine nette Überraschung per Post.
Natürlich gibt es noch weitere Fälle, dies sind nur einige Beispiele. Eine Google-Suche sollte eine Vielzahl von Artikeln und Anleitungen ergeben, von denen viele wahrscheinlich weitere Beispiele enthalten. Die Wikipedia-Seite enthält ebenfalls einige Beispiele, die für Sie interessant sein könnten.
Der Grundgedanke der Beispiele ist, dass jemand Ihre Website austricksen kann, um eine Aktion auszuführen, als ob sie von einem Benutzer käme, obwohl der Benutzer in Wirklichkeit gar nicht wusste, dass dies geschah oder nicht wollte, dass es geschah. Wenn Sie auf Ihrer Website irgendeine Art von Aktion durchführen, die destruktiv ist (d. h. Dinge aus einem Benutzerkonto löschen kann, einen Benutzer ausloggt usw.) oder kritisch ist (d. h. mit Geld zu tun hat), sollten Sie wahrscheinlich CSRF-Tokens verwenden. Wenn es sich bei Ihrer Website nur um ein Fotoalbum für Freunde usw. handelt, brauchen Sie sich wahrscheinlich nicht um CSRF-Tokens zu kümmern (obwohl es immer gut ist, für den Fall zu üben, dass Sie eine Website erstellen, die sie benötigt).
Solange Sie kein Token hinzufügen, um sicherzustellen, dass eine Anfrage von einem Formular stammt, das Sie dem Benutzer absichtlich vorgelegt haben, haben Sie keine Möglichkeit zu wissen, ob der Benutzer die Aktion durchführen wollte.
Sie sollten also immer ein eindeutiges Token für jedes Formular verwenden, das Sie erstellen, und alle Anfragen, die an Ihre Website gepostet werden, auf ein gültiges Token für den aktuellen Benutzer überprüfen. Achten Sie außerdem darauf, dass die Token nach einer gewissen Zeit ablaufen, damit sie nicht ewig gültig sind.
8 Stimmen
Klingt wie jemand, der mehr über die Sicherheit von Anwendungen erfahren möchte.