Ich möchte Anti-CSRF-Token in Global.asax-Datei von MVC 3 implementieren. Ist es möglich, das gleiche in Gloabl.asax-Datei zu implementieren.Anti-CSRF-Implementierung in MVC 3
Antwort
scheint, was Sie brauchen, ist eine benutzerdefinierte Filterklasse zu schaffen, die für alle IAuthorizationFilter
POST
Methoden implementiert, indem Sie HttpContext.Request.HttpMethod
Anfrage:
public class ValidateAntiForgeryTokenEveryPost : IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext context)
{
if (context.HttpContext.Request.HttpMethod == "POST")
{
System.Web.Helpers.AntiForgery.Validate();
}
}
}
Dann fügen Sie den neuen Filter in FilterConfig
Klasse:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ValidateAntiForgeryTokenEveryPost());
}
}
Stellen Sie auch sicher, dass der benutzerdefinierte Filter registriert hat in Global.asax
Code:
protected void Application_Start()
{
// other settings
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
// other settings
}
Durch die Verwendung von globalen Filtern oben angegebenen alle POST-Methode Anforderungen für AntiForgeryToken
automatisch überprüft werden, sind unabhängig davon, ob @Html.AntiForgeryToken()
nicht vorhanden Innenansicht Seiten.
Nachtrag 1:
Es ist möglich, bestimmte Aktionen von CSRF-Token Prüfung auszuschließen, was Sie daran hindert Validate
Verfahren müssen auszuführen, während ein benutzerdefiniertes Attribut Klasse vorhanden ist. Erstellen Sie zunächst eine benutzerdefinierte Attributklasse für Validierungsprüfung:
[AttributeUsage(AttributeTargets.Method)]
public class ExcludeAntiForgeryCheckAttribute : Attribute
{
// other stuff
}
Danach ActionDescriptor.GetCustomAttributes
verwenden, um benutzerdefinierte zu bekommen Attributtyp erstellt oben:
public class ValidateAntiForgeryTokenEveryPost : IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext context)
{
// adapted from Darin Dimitrov (/a/34588606/)
bool isValidate = !context.ActionDescriptor.GetCustomAttributes(typeof(ExcludeAntiForgeryCheckAttribute), true).Any();
// use AND operator (&&) if you want to exclude POST requests marked with custom attribute
// otherwise, use OR operator (||)
if (context.HttpContext.Request.HttpMethod == "POST" && isValidate)
{
System.Web.Helpers.AntiForgery.Validate();
}
}
}
Dann können Sie alle Methoden dekorieren, die von CSRF Validierung ausgenommen werden sollten token:
[HttpPost]
[ExcludeAntiForgeryCheck]
public ActionResult Index(ViewModel model)
{
// other stuff
return View(model);
}
Referenzen:
Check CRSF token by default in ASP.NET MVC (Standardversion)
Securing all forms using AntiForgeryToken (Attribut-basierte Version)
Ich glaube nicht. Für jede Anfrage müssen wir Token überprüfen. Bitte versuchen Sie den folgenden Code in der View-Datei zu verwenden.
@ Html.AntiForgeryToken()
Wir können in jeder Ansicht Seite implementieren. Aber ich möchte dasselbe in der Global.asax-Datei implementieren. –
- 1. Radiobox in MVC 3
- 2. Routing in MVC 3
- 3. MVC Mehrere Bereiche MVC 3
- 4. Lambda Ausdrücke in MVC 3
- 5. Upgrade auf MVC 3
- 6. ASP.Net MVC 3 AutoMapper
- 7. ASP.NET MVC 3 Anforderungen
- 8. ASP.Net MVC 3 Grids
- 9. ASP.NET MVC 3 Veröffentlichungsdatum?
- 10. Benutzerdefinierte URLs in ASP MVC 3
- 11. Output Caching & Substitution in MVC 3
- 12. Dekodierung HTML in ASP.NET MVC 3
- 13. Wie Console.WriteLine in ASP.Net MVC 3 verwenden
- 14. Hinzufügen von Kopfzeilen in ASP.NET MVC 3
- 15. Dynamische TempData in ASP.NET MVC 3
- 16. MVC 3 Split-Parameter in HttpPost Aktion
- 17. PartialViews in Asp.net MVC 3 RC2
- 18. Benutzerdefinierte Bibliotheken mit Razor in MVC 3
- 19. MvcApplication.Modules ist überraschend leer in MVC 3
- 20. Senden Sie eine Mail in mvc 3
- 21. Remote-Validierung in ASP.NET MVC 3
- 22. Cascading Dropdowns in MVC 3 Razor View
- 23. Razor Helfer in MVC 3 RC
- 24. Manuelle Remote-Validierung in ASP.NET MVC 3
- 25. Direkte Feldzugang in Spring MVC 3
- 26. Mail Versand nicht in mvc 3
- 27. .Net MVC 3 403.14 Fehler
- 28. ASP.NET MVC 3 Razor -leistung
- 29. ASP.NET MVC 3 Razor Intellisense
- 30. Frühling 3 MVC Nesting RequestMapping
Vielen Dank. Noch eine Frage. Ich bin neu in MVC, also bin ich nicht sicher, unter welchem Ordner ich benutzerdefinierte Filterklasse erstellen muss. Können Sie mir bitte einen Vorschlag machen? –
Ich denke, Ihre benutzerdefinierte Filterklasse kann im 'App_Start' -Verzeichnis oder einem beliebigen Verzeichnis erstellt werden, vorausgesetzt, dass der Root-Namespace des Projekts anstelle von' ProjectName.App_Start' oder 'ProjectName.FolderName' verwendet wird. –
Vielen Dank .. @Tetsuya Yamamoto –