Traditionelle Plattform

Cross-Site Request Forgery (CSRF)

Das zugrunde liegende Framework bietet der Anwendung einen Schutz gegen Cross-Site Request Forgery (CSRF), die eine Website böswillig nutzt, indem nicht autorisierte Befehle von einem Benutzer übertragen werden, dem die Website vertraut.

CSRF (auch als XSRF bezeichnet) unterscheidet sich vom Cross-Site Scripting (CSS oder XSS), das das Vertrauen eines Benutzers in eine bestimmte Site ausnutzt. CSRF ist auch bekannt als One-Click-Attack (Angriff per Mausklick), Sidejacking oder Session-Riding.

CSRF funktioniert so, dass ein Link oder ein Script auf einer Seite eingefügt ist, über den bzw. das auf eine Site zugegriffen wird, für die der Benutzer sich bekanntermaßen oder vermutlicherweise authentifiziert hat. Beispiel: Benutzer A durchsucht ein Forum, in dem Benutzer B eine Nachricht veröffentlicht hat. Mit CSRF erstellt Benutzer B möglicherweise das folgende HTML-Bildelement, das keine Bilddatei ist, sondern auf ein Script auf der Website der Bank von Benutzer A verweist und eine Auszahlung von 1.000.000 EUR anfordert:

<img src="http://bank.example/withdraw?amount=1000000&for=USER-B">

Wenn die Bank von Benutzer A die Authentifizierungsdaten in einem Cookie aufbewahrt und das Cookie nicht abgelaufen ist, bewirkt der Versuch des Browsers von Benutzer A, das Bild zu laden, dass das Auszahlungsformular mit dem Authentifizierungscookie übergeben und eine Transaktion ohne die Genehmigung von Benutzer A autorisiert wird.

In diesem Szenario kann das Problem in die folgenden drei Punkte zusammengefasst werden:
  • Aufgrund der Browserrichtlinie werden die Authentifizierungscookies an den Bankserver gesendet, auch wenn die Anforderung von einer anderen Website stammt.
  • Die Bank von Benutzer A speichert Authentifizierungsdaten in einem Cookie und verlässt sich für Authentifizierungen vollständig auf die Cookies.
  • Die Bank von Benutzer A unterscheidet nicht zwischen GET- und POST-Anforderungen.
Der Schutz vor CSRF im zugrunde liegenden Framework gilt nicht für den ersten Punkt, da es sich um eine Browserrichtlinie handelt. Er gilt jedoch für Punkt zwei und drei, da zur Authentifizierung sowohl ein Cookie als auch ein zusätzliches Token verwendet werden. CSRF-Attacken werden üblicherweise verhindert, indem stets auf ein eindeutiges Token in jeder Anforderung überprüft wird, die den Server erreicht. Im zugrunde liegenden Framework wird das Token wie folgt verwendet:
  1. Nach erfolgter Anmeldung wird ein neu erstelltes Token für die Sitzung festgelegt (zu Validierungszwecken). Dieses Token ist auf der Clientseite der Anwendung verfügbar.
  2. Das Token wird wie folgt verwendet:
    • Dieses Token wird für alle Ajax-Anforderungen und innerhalb der Dienstprogramme des zugrunde liegenden Frameworks verwendet.
    • Wenn der Server eine POST- oder GET-Anforderung erhält, validiert die Anwendung automatisch, ob das CSRF-Token in der Anforderung verfügbar ist.