Как я могу установить ValidateAntiForgeryToken глобально - PullRequest
13 голосов
/ 06 марта 2011

Безопасность вначале.

Рекомендации MVC рекомендуют добавлять атрибут [ValidateAntiForgeryToken] к каждому [HttpPost] действию.

Как применить это правило в одной уникальной точке приложения

1 Ответ

16 голосов
/ 06 марта 2011

Следующий класс позволяет делать это с 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() в представлении.

...