AntiForgery.Validate () vs ValidateAntiForgeryToken

8

Funktioniert die Methode System.Web.Helpers.AntiForgery.Validate (); führen Sie genau die gleiche Funktion wie die [ValidateAntiForgeryToken] Dekoration durch?

Ich denke darüber nach, meine Abmelde-Methode zu ändern:

%Vor%

Dies würde verhindern, dass eine Anti-Fälschungs-Ausnahme ausgelöst wird, wenn das System bereits ausgeloggt ist, weil die Anmeldung abläuft. Ich will nur sicher sein, dass AntiForgery.Validate () die gleiche Aufgabe wie ValidateAntiForgeryToken ausführen wird.

Ich habe einen zusätzlichen Ausnahmebehandler verwendet, um diese Ausnahme abzufangen. Das Problem blieb jedoch, dass Elmah diese Ausnahme immer noch protokollierte und ich zu vielen Nachrichten komme.

    
Chris Nevill 18.03.2014, 12:47
quelle

1 Antwort

14

Es scheint, dass beide Ansätze die im Formular vorhandenen AntiForgeryToken validieren würden. Ich habe die Assemblys überprüft, und das ValidateAntiForgeryTokenAttribute ruft die AntiForgery.Validate-Methode auf, um die Validierung durchzuführen. Beide Ansätze werden dann eine HttpValidateAntiForgeryException auslösen, wenn die Validierung fehlschlägt. Die kurze Antwort darauf, ob sie dieselbe Aufgabe erfüllen, ist Ja.

Es gibt einen feinen Unterschied in der Tatsache, dass ValidateAntiForgeryTokenAttribute das Token früher im MVC-Ausführungszyklus - in der OnAuthorization-Methode - validiert. Dies kann einen Unterschied in der Leistung bewirken, wenn Sie eine ressourcenintensive Aufgabe in der Controller-Aktion ausführen, bevor Sie Ihre AntiForgeryToken.Validate () - Überprüfung durchführen.

Eine weitere Sache, die Sie beachten sollten, ist, dass Sie möglicherweise zusätzliche Arbeit für sich selbst schaffen (ganz zu schweigen von den möglichen Sicherheitslücken beim Auslassen), indem Sie für jede HttpPost-Aktion das folgende Codeelement benötigen %Vor%

Indem Sie das folgende Attribut erstellen und diese Post-Methoden damit dekorieren, haben Sie Ihre gewünschte Funktionalität und müssen nicht den obigen Code in jeder Post-Aktion haben

%Vor%

Eine letzte Sache, die Ausnahmen sind normal in der Validierung von AntiForge. Dies liegt daran, dass die AntiForgery.Validate-Methode eine HttpValidateAntiForgeryException auslöst, wenn die Validierung fehlschlägt. Wie Sie im obigen Code sehen, habe ich diese Exception abgefangen und nach Abschluss des Logouts erneut ausgelöst.

    
Anthony Longano 18.03.2014, 15:38
quelle