如何全局设置ValidateAntiForgeryToken

时间:2011-03-06 20:56:48

标签: asp.net-mvc model-view-controller asp.net-mvc-3 action-filter

首先是安全。

MVC最佳做法建议在每个[ValidateAntiForgeryToken]操作中添加[HttpPost]属性。

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

1 个答案:

答案 0 :(得分:16)

以下类允许使用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;
}

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

...    
FilterProviders.Providers.Add(new AntiForgeryTokenFilterProvider ());
..

执行此操作时,每个[HttpPost]都会检查Html.AntiForgeryToken()是否在视图中。