如何全局设置ValidateAntiForgeryToken

Fab*_*zio 14 model-view-controller asp.net-mvc action-filter asp.net-mvc-3

安全起初.

MVC最佳实践建议将[ValidateAntiForgeryToken]属性添加到每个[HttpPost]操作.

如何在应用程序的一个独特点强制执行此规则?

Fab*_*zio 17

以下类允许使用FilterProvider执行此操作

public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
    List<Filter> result = new List<Filter>();

    string incomingVerb = controllerContext.HttpContext.Request.HttpMethod;

    if (String.Equals(incomingVerb, "POST", StringComparison.OrdinalIgnoreCase))
    {
        result.Add(new Filter(new ValidateAntiForgeryTokenAttribute(), FilterScope.Global, null));
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

要使用上面的类,请将其添加到文件中的RegisterGlobalFilters方法global.asx:

...    
FilterProviders.Providers.Add(new AntiForgeryTokenFilterProvider ());
..
Run Code Online (Sandbox Code Playgroud)

这样做,每个人[HttpPost]都会检查它Html.AntiForgeryToken()是否在视图中.

  • 该代码将导致为应用程序的每个请求创建一个列表.它可以通过使用yield来改进:yield return new Filter(new ValidateAntiForgeryTokenAttribute(),FilterScope.Global,null); (5认同)
  • 为了清楚起见,链接到完整课程:https://code.google.com/p/vnecoo/source/browse/trunk/Code/Oas2011/OAS/Helpers/AntiForgeryTokenFilterProvider.cs?r=148 (2认同)