Wie würde ich einen ActionFilter schreiben, der sicherstellt, dass AntiForgeryTokens für jeden Post-Vorgang verwendet wird?

8

Ich möchte AntiForgeryTokens für jede HttpPost-Aktion mit einem ActionFilter verwenden, der sich in einem Controller namens ControllerBase befindet, von dem jeder andere Controller erbt.

Ich möchte dies tun, indem ich einen ActionFilter erstelle, der von ValidateAntiForgeryToken erbt, der ein Argument benötigt, das angibt, auf welche HTTP-Verben er sich anwenden soll. Ich möchte dann diesen Filter auf ControllerBase anwenden, um sicherzustellen, dass das AntiForgeryToken für JEDEN POST-Vorgang auf der gesamten Site überprüft wird.

Ich habe mit diese Lösung , aber

  • AuthorizationContext Constructor (ControllerContext) ist ein veralteter Konstruktor und ich bin mir nicht sicher, wie ich den Code mit der empfohlenen AuthorizationContext(ControllerContext controllerContext, ActionDescriptor actionDescriptor) wiederherstellen soll.

  • Es scheint nicht, das AntiForgeryToken standardmäßig zu verwenden, da ich nach jeder Postaktion den folgenden Fehler erhalte: A required anti-forgery token was not supplied or was invalid .

Wie soll ich meinen ActionFilter so umschreiben, dass er die aktuellen, nicht überholten Standards erfüllt und ein Anti-Fälschungs-Token für jedes [HttpPost] Verb richtig verwendet?

Muss ich selbst in jeder Form einen Anti-Fälschungs-Token enthalten (ich denke, dass ich das tue)? (Im Gegensatz dazu, dass es automatisch generiert wird - lach nicht, ich bin neugierig) Update: Wie in den Kommentaren darauf hingewiesen; Ja, das muss mit jedem Formular gemacht werden.

Hier ist der Code von meiner ControllerBase als Referenz:

%Vor%     
Ecnalyr 02.08.2012, 15:47
quelle

2 Antworten

1

Sie müssen keine AuthorizationContext instanziieren oder die Methode OnAuthorization aufrufen, einfach:

%Vor%     
Darin Dimitrov 03.08.2012, 06:30
quelle
7
___ answer219500A ___

Ich habe den folgenden Ansatz verwendet:

%Vor%

Dies ermöglicht es uns, sie von Fall zu Fall mit dem SkipCRSRFCheck-Attribut zu deaktivieren und sie dann als globalen Filter im Application_Start zu registrieren:

GlobalFilters.Filters.Add (neues AntiForgeryTokenFilter ());

    
___ tag123aspnetmvc3 ___ ASP.NET MVC 3 ist die dritte Hauptversion der Model-View-Controller-Erweiterung für die Entwicklung von Webanwendungen in einem .NET-Framework. ___ qstnhdr ___ Wie würde ich einen ActionFilter schreiben, der sicherstellt, dass AntiForgeryTokens für jeden Post-Vorgang verwendet wird? ___ tag123aspnetmvc ___ Das ASP.NET MVC Framework ist ein Open-Source-Webanwendungs-Framework und -Tooling, das eine auf Web-Anwendungen zugeschnittene Version des Model-View-Controller (MVC) -Musters implementiert und auf einer ASP.NET-Technologiegrundlage aufbaut. ___ qstntxt ___

Ich möchte %code% für jede HttpPost-Aktion mit einem ActionFilter verwenden, der sich in einem Controller namens %code% befindet, von dem jeder andere Controller erbt.

Ich möchte dies tun, indem ich einen ActionFilter erstelle, der von %code% erbt, der ein Argument benötigt, das angibt, auf welche HTTP-Verben er sich anwenden soll. Ich möchte dann diesen Filter auf %code% anwenden, um sicherzustellen, dass das %code% für JEDEN POST-Vorgang auf der gesamten Site überprüft wird.

Ich habe mit diese Lösung , aber

  • %code% ist ein veralteter Konstruktor und ich bin mir nicht sicher, wie ich den Code mit der empfohlenen %code% wiederherstellen soll.

  • Es scheint nicht, das AntiForgeryToken standardmäßig zu verwenden, da ich nach jeder Postaktion den folgenden Fehler erhalte: %code% .

Wie soll ich meinen ActionFilter so umschreiben, dass er die aktuellen, nicht überholten Standards erfüllt und ein Anti-Fälschungs-Token für jedes %code% Verb richtig verwendet?

Muss ich selbst in jeder Form einen Anti-Fälschungs-Token enthalten (ich denke, dass ich das tue)? (Im Gegensatz dazu, dass es automatisch generiert wird - lach nicht, ich bin neugierig) Update: Wie in den Kommentaren darauf hingewiesen; Ja, das muss mit jedem Formular gemacht werden.

Hier ist der Code von meiner ControllerBase als Referenz:

%Vor%     
___ tag123antiforgerytoken ___ Kryptographische Nonce für den Schutz gegen CSRF ___ tag123httpverbs ___ HTTP-Verben stellen die Anforderungsmethoden dar, die als Teil des Hypertext Transfer Protocol erkannt werden. Diese umfassen, sind aber nicht beschränkt auf POST, GET, PUT und DELETE. ___ answer11790440 ___

Sie müssen keine %code% instanziieren oder die Methode %code% aufrufen, einfach:

%Vor%     
___ tag123actionfilter ___ In ASP.NET MVC definieren Controller Aktionsmethoden, die normalerweise eine Eins-zu-Eins-Beziehung mit möglichen Benutzerinteraktionen haben, z. B. das Klicken auf einen Link oder das Absenden eines Formulars. Wenn der Benutzer beispielsweise auf eine Verknüpfung klickt, wird eine Anforderung an den angegebenen Controller weitergeleitet, und die entsprechende Aktionsmethode wird aufgerufen. ___
James Crowley 22.02.2014 13:33
quelle