Sicherheit im Webbenutzerschnittstellen-Framework - Cross-Site Request Forgery (CSRF)

Das Webbenutzerschnittstellen-Framework bietet der Anwendung Schutz von Cross-Site Request Forgery (Website-übergreifende Anfragenfälschung), die eine Website in bösartiger Absicht nutzt. Dabei werden über einen Benutzer, dem die Website vertraut, nicht autorisierte Befehle übertragen. 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 Webbenutzerschnittstellen-Framework bezieht sich nicht auf den ersten Punkt, da es sich dabei um eine Browser-Richtlinie 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 Webbenutzerschnittstellen-Framework wird das Token auf folgende Weise eingesetzt:
  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 in den Dienstprogrammen des Webbenutzerschnittstellen-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.