AutoValidateAntiForgeryToken 与 ValidateAntiForgeryToken

AutoValidateAntiForgeryToken vs. ValidateAntiForgeryToken

我刚才试图通过提供防伪令牌来保护 post 方法来防止副脚本,但我注意到,在 .Net Core 中还有另一个名为 AutoAntiForgeryToken 的属性。 XML 评论和在线搜索没有提供有关此新属性的太多信息。

任何有关新属性的帮助和描述,我们将不胜感激。

来自 AutoValidateAntiforgeryTokenAttribute documentation:

An attribute that causes validation of antiforgery tokens for all unsafe HTTP methods. An antiforgery token is required for HTTP methods other than GET, HEAD, OPTIONS, and TRACE. It can be applied at as a global filter to trigger validation of antiforgery tokens by default for an application.

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

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

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

如果您需要忽略防伪验证,您可以将 [IgnoreAntiforgeryToken] 属性添加到操作中。

您有时可能会发现自己需要标记多个请求 controller,同时要求一些请求不需要anti-forgery,比如各种 基于 GET 的操作。 您可以使用多种工具来帮助流程成为 对用户来说更加方便和舒适。 第一个是 AutoValidateAntiforgeryToken 属性。 它的行为类似于 ValidateAntiForgeryToken 属性;但是,它会自动忽略操作 使用以下方法调用它们:GET、HEAD、OPTIONS 和 TRACE,它们是 专为数据检索而设计。 这使您可以快速轻松地将 anti-forgery 添加到 所有可以更改数据的方法,而不影响检索数据的方法。

以下代码是 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 操作和 RemoveUser 操作都是 DELETE 方法都需要客户端使用 anti-forgery 个令牌。