CA5391: Use tokens antifalsificação em controladores MVC ASP.NET Core
Property | valor |
---|---|
ID da regra | CA5391 |
Título | Usar tokens antifalsificação em controladores MVC ASP.NET Core |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Não |
Motivo
As ações que resultam em operações de modificação não têm um atributo de token antifalsificação. Ou, usando um filtro de token antifalsificação global sem chamar as funções de token antifalsificação esperadas.
Descrição da regra
Lidar com um POST
, PUT
, PATCH
ou DELETE
solicitação sem validar um token antifalsificação pode ser vulnerável a ataques de falsificação de solicitação entre sites. Um ataque de falsificação de solicitação entre sites pode enviar solicitações maliciosas de um usuário autenticado para seu controlador MVC ASP.NET Core.
Como corrigir violações
- Marque a ação de modificação com um atributo de token antifalsificação válido:
- Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.
- Atributo cujo nome é como
%Validate%Anti_orgery%Attribute
.
- Adicione o atributo de token de falsificação válido ao filtro global com Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add.
- Adicione qualquer classe de filtro antifalsificação personalizada ou fornecida pelo Mvc que chame
Validate
qualquer classe que implemente a Microsoft.AspNetCore.Antiforgery.IAntiforgery interface.
Quando suprimir avisos
É seguro suprimir essa regra se outras soluções além do uso de atributos de token antifalsificação forem adotadas para mitigar as vulnerabilidades do CSRF. Para obter mais informações, consulte Prevenir ataques de falsificação de solicitação entre sites (XSRF/CSRF) no ASP.NET Core.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA5391
// The code that's violating the rule is on this line.
#pragma warning restore CA5391
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5391.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Configurar código para análise
Você pode configurar se a regra se aplica apenas a classes derivadas de em sua base de Microsoft.AspNetCore.Mvc.Controller código. Por exemplo, para especificar que a regra não deve ser executada em nenhum código dentro de tipos derivados de ControllerBase, adicione o seguinte par chave-valor a um arquivo .editorconfig em seu projeto:
dotnet_code_quality.CA5391.exclude_aspnet_core_mvc_controllerbase = true
Exemplos de pseudocódigo
Sem violação de atributo de token antifalsificação
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[HttpDelete]
public IActionResult ExampleAction (string actionName)
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction (string actionName)
{
return null;
}
}
Sem filtro anti-falsificação global válido
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction (string actionName)
{
return null;
}
[HttpDelete]
public IActionResult ExampleAction (string actionName)
{
return null;
}
}
class FilterClass : IAsyncAuthorizationFilter
{
public Task OnAuthorizationAsync (AuthorizationFilterContext context)
{
return null;
}
}
class BlahClass
{
public static void BlahMethod ()
{
FilterCollection filterCollection = new FilterCollection ();
filterCollection.Add(typeof(FilterClass));
}
}
Marcado com uma solução de atributo de token antifalsificação
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult ExampleAction ()
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction ()
{
return null;
}
}
Usando um filtro antifalsificação global válido
using System.Threading.Tasks;
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction()
{
return null;
}
[HttpDelete]
public IActionResult ExampleAction()
{
return null;
}
}
class FilterClass : IAsyncAuthorizationFilter
{
private readonly IAntiforgery antiforgery;
public FilterClass(IAntiforgery antiforgery)
{
this.antiforgery = antiforgery;
}
public Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
return antiforgery.ValidateRequestAsync(context.HttpContext);
}
}
class BlahClass
{
public static void BlahMethod()
{
FilterCollection filterCollection = new FilterCollection();
filterCollection.Add(typeof(FilterClass));
}
}