AutoValidateAntiForgeryToken与ValidateAntiForgeryToken

时间:2016-10-09 19:10:08

标签: asp.net asp.net-core asp.net-core-mvc .net-core

我试图通过提供反伪造令牌来保护一个针对副脚本的post方法但是注意到,在.Net Core中还有另一个名为AutoAntiForgeryToken的属性。 XML注释和在线搜索没有提供有关此新属性的大量信息。

任何有关新属性的帮助和说明都将非常感激。

2 个答案:

答案 0 :(得分:20)

来自AutoValidateAntiforgeryTokenAttribute documentation

  

导致所有人都要验证防伪令牌的属性   不安全的HTTP方法。 HTTP方法需要防伪签名   除了GET,HEAD,OPTIONS和TRACE之外。它可以作为一个应用   全局过滤器,默认情况下触发防伪标记的验证   申请。

AutoValidateAntiforgeryTokenAttribute允许对所有不安全的方法全局应用反伪造令牌验证,例如POST, PUT, PATCH and DELETE。因此,您无需为需要它的每个操作添加[ValidateAntiForgeryToken]属性。

要使用它,请将以下代码添加到ConfigureServices

Startup方法中
services.AddMvc(options =>
{
    options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});

如果您需要忽略Anti伪造验证,则可以为该操作添加[IgnoreAntiforgeryToken]属性。

答案 1 :(得分:0)

有时您可能会发现自己需要在一个广告中标记多个请求 控制器,同时要求某些要求不要求伪造的请求,例如各种 基于GET的操作。 您可以使用多种工具来帮助该流程成为 为用户带来更多的方便和舒适。 第一个是AutoValidateAntiforgeryToken属性。 它的行为类似于 ValidateAntiForgeryToken属性;但是,它将自动忽略动作 用以下方法调用:GET,HEAD,OPTIONS和TRACE,它们是 为数据检索而设计。 这使您可以快速轻松地向 在不影响数据检索方法的情况下可以更改数据的所有方法。

以下代码是AutoValidateAntiforgeryToken属性的示例:

[AutoValidateAntiforgeryToken]
public class AntiForgeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
    [HttpPost]
    public IActionResult Index(string userName)
    {
        return View("Index", userName);
    }
    [HttpDelete]
    public IActionResult RemoveUser(string userName)
    {
        string url = string.Format("~/RemovedUser/{0}", userName);
        return RedirectToAction("Account", "RemoveUser", "User");
    }
}

在此示例中,正常的索引操作(GET)不管来源如何都可以工作, 带有POST方法的Index操作和一个 删除方法都将要求客户端使用防伪令牌。