【问题标题】:AutoValidateAntiForgeryToken vs. ValidateAntiForgeryTokenAutoValidateAntiForgeryToken 与 ValidateAntiForgeryToken
【发布时间】:2016-10-09 19:10:08
【问题描述】:

我刚才试图通过提供防伪令牌来保护 post 方法免受侧面脚本的攻击,但注意到,在 .Net Core 中有另一个名为 AutoAntiForgeryToken 的属性。 XML cmets 和在线搜索没有提供关于这个新属性的太多信息。

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

【问题讨论】:

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


    【解决方案1】:

    来自AutoValidateAntiforgeryTokenAttributedocumentation

    用于验证所有防伪令牌的属性 不安全的 HTTP 方法。 HTTP 方法需要防伪令牌 除了 GET、HEAD、OPTIONS 和 TRACE。它可以作为一个应用 默认情况下触发防伪令牌验证的全局过滤器 申请。

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

    要使用它,请将以下代码添加到 Startup 类的 ConfigureServices 方法中

    services.AddMvc(options =>
    {
        options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
    });
    

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

    【讨论】:

      【解决方案2】:

      您有时可能会发现自己需要标记多个请求 控制器,同时要求一些请求不需要防伪,例如各种 基于 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 操作和 RemoveUser 操作都是 DELETE 方法都需要客户端使用防伪令牌。

      【讨论】:

        猜你喜欢
        • 2014-04-24
        • 2019-02-23
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 2012-07-13
        • 2018-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多