Zunächst einmal ist dieser Beitrag das, was Jeff Atwood über CSRF-Token sagt. Auf dieser Seite sagt er weiter:
Eine noch stärkere, wenn auch komplexere Präventionsmethode besteht darin, den Serverstatus zu nutzen, um für jedes einzelne HTML-FORMULAR, das Sie an den Client senden, einen eindeutigen Zufallsschlüssel zu generieren (und mit Zeitüberschreitung zu verfolgen). Wir verwenden eine Variante dieser Methode mit großem Erfolg für den Stapelüberlauf.
In diesem Beitrag selbst bemerkt Jeff jedoch nie, wann und wie die Token aktualisiert werden sollten.
Ich habe eine ähnliche Technik in einer Web-App verwendet, an der ich gearbeitet habe. Es funktioniert so:
- Immer wenn der Benutzer
POST
Daten an meinen Server sendet, wird ein CSRF-Token gesendet. - Dieses CSRF-Token wird in der Sitzung des Benutzers in einem kryptografisch starken Cookie gespeichert.
- Wenn das Token gültig ist, wird die Anforderung des Benutzers verarbeitet und umgekehrt.
- Wenn die Anforderung gültig ist, verwerfen Sie das alte Token auf der Serverseite und erstellen Sie ein neues Token. Die Antwort vom Server enthält ein neues csrf-Token, das bei der nächsten Anforderung verwendet werden soll. Das alte Token auf allen Formularen auf einer Seite wird mit dem neuen aktualisiert, damit die nächste Anforderung ordnungsgemäß verarbeitet wird.
Ist es POST
sinnvoll, die Token nach jeder Anforderung zu aktualisieren, oder sollte die Aktualisierung nur durchgeführt werden, wenn der Benutzer eine GET
Anforderung stellt und dasselbe Token behält, bis die nächste GET-Anforderung erfolgt?