Der beste Weg, um den CSRF-Schutz ordnungsgemäß zu erstellen:
Nicht.
In den meisten gängigen Frameworks ist dieser Schutz bereits integriert (ASP.NET) , Struts, Ruby (glaube ich) oder es gibt bereits Bibliotheken, die bereits überprüft wurden. (z. B. CSRFGuard von OWASP).
Abhängig von Ihrem Kontext besteht eine weitere Option darin, die erneute Authentifizierung des Benutzers zu erzwingen, jedoch nur für bestimmte, vertrauliche Vorgänge.
Laut Ihren Kommentaren ist Ihre Lösung nicht schlecht, wenn Sie dies selbst implementieren müssen, aber ich würde es vereinfachen.
Sie können eine kryptozufällige Nonce generieren (lang genug) ), speichern Sie das im Sitzungsspeicher und ändern Sie es alle X Minuten (Sie speichern die Ablaufzeit auch in der Sitzung). In jedem Formular fügen Sie die Nonce in ein ausgeblendetes Formularfeld ein und vergleichen diesen Wert, wenn das Formular veröffentlicht wird.
Wenn das Formular-Token übereinstimmt, sind Sie klar. Wenn nicht, können Sie z. das vorherige Token auch, um die Randfälle zu behandeln.
Obwohl ich sagen muss, dass ich zu viele fehlgeschlagene Versuche gesehen habe, dies selbst zu implementieren, um diesen Pfad wirklich zu empfehlen. Sie sind immer noch besser dran, ein minimales Paket zu finden, das dies für Sie erledigt.