CSRF令牌是否自动应用于AspNetCore 3. +控制器中?

问题描述

我已经了解到CSRF令牌在Razor页面中会自动进行验证,但这是否也适用于控制器,还是我仍然必须在视图中使用@Html.AntiForgeryToken() TagHelper和我的[ValidateAntiForgeryToken]属性控制器方法

如果是这样,我已经读过Andrew Locks Blog,可以添加一个Filter来执行相同的操作,但这是在NetCore 3. +之前的。

我的Startup.cs中的此实现正确吗?

services.AddControllers()
    .AddMvcoptions(options => {
        options.Filters.Add(new AutovalidateAntiforgeryTokenAttribute());
    });

解决方法

否,您不需要使用@Html.AntiForgeryToken(),因为当您使用<form>标签帮助程序时,它将为您插入防伪令牌(如果method属性为“ post ”,而action不是外部超链接。

https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-3.1#aspnet-core-antiforgery-configuration

在ASP.NET Core 2.0或更高版本中,FormTagHelper将防伪令牌注入HTML表单元素。

并且:

当标记包含method =“ post”属性且以下任一条件为true时,会自动生成HTML表单元素的防伪标记:

  • 动作属性为空(action =“”)。
  • 未提供action属性()。

也:

我们建议在非API方案中广泛使用AutoValidateAntiforgeryToken。这样可以确保POST操作在默认情况下受到保护。替代方法是默认情况下忽略防伪令牌,除非将ValidateAntiForgeryToken应用于各个操作方法。