Ich implementiere CSRF-Schutz gegen Fälschungen in meiner ASP.NET MVC 5-Anwendung. Insbesondere verweise ich auf den Ansatz von Mike Wasson auf der ASP.NET-Website , um Controller-Methoden zu schützen, die auf AJAX-Anfragen reagieren, z. B. in WebAPI-Controllern. Dieser Ansatz verwendet die AntiForgery.GetTokens Methode zum Generieren benutzerbasierter kryptographischer Anti-Fälschungs-Tokens und dann AntiForgery.Validate , um zu überprüfen, ob die übermittelten Token dem aktuellen Benutzer gehören.
Meine Frage ist: Gibt es eine Lebenszeit für diese Token? Verfallen sie, und wenn ja, für wie lange sind sie gut? Die Dokumentation ist auf das Thema stumm.
Ich möchte nicht auslaufende Token in meinem System nicht zulassen. Zusätzlich möchte ich dem Kunden mitteilen, wie lange es dauert, bis ein neues Token angefordert wird. Ich kann ggf. ablaufende Tokens implementieren, indem ich FormsAuthentication.Encrypt ; Wenn das Ablaufdatum jedoch bereits in die Methoden der Klasse AntiForgery
integriert ist, möchte ich mir die unnötige Komplexität ersparen.
Die Idee ist, dass zwei Token von jedem anfälligen HTTP-POST generiert und direkt an den Server gesendet werden. Wenn Sie also in einem Formular auf die Schaltfläche "Senden" klicken, werden zwei Token generiert: ein Cookie und ein Formularwert, beide basierend auf den Benutzeranmeldeinformationen, die hier zu lesen sind (schön geschriebener Artikel): Ссылка
Das Cookie-Token, das tatsächlich ablaufen kann, ist redundant und für das System nicht notwendig, außer für den Fall, dass eine anonyme Authentifizierung versucht wird. Z.B. siehe hier (erste Antwort): MVC 2 AntiforgeryToken - Warum symmetrische Verschlüsselung + IPrinciple?
Dennoch ist Ihr anderes Token für Angreifer nicht lesbar und diese Token werden bei jeder neuen Anfrage generiert. Daher müssen Sie sich keine Gedanken über das Ablaufdatum machen.
Bearbeiten : Das alles kann auch im Kommentarbereich des Artikels gelesen werden, auf den du dich beziehst (Mike Wasson);)
Tags und Links asp.net-mvc asp.net-web-api c# asp.net-mvc-5 csrf