Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| Property | Valor |
|---|---|
| ID da regra | CA5391 |
| Título | Usar tokens antifalsificação em controladores MVC do ASP.NET Core |
| Categoria | Segurança |
| Correção interruptiva ou sem interrupção | Sem interrupção |
| Habilitado por padrão no .NET 10 | Não |
Causa
As ações que resultam na modificação de operações não têm um atributo de token antifalsificação. Ou, o uso de um filtro de token antifalsificação global sem chamar as funções de token antifalsificação esperadas.
Descrição da regra
Manipular uma solicitação POST, PUT, PATCH ou DELETE sem validar um token antifalsificação pode gerar vulnerabilidades relacionadas a ataques de solicitação intersite forjada. Um ataque de solicitação intersite forjada pode enviar solicitações mal-intencionadas de um usuário autenticado para o controlador MVC do 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 é semelhante a
%Validate%Anti_orgery%Attribute.
- Adicione o atributo de token contra falsificação válido ao filtro global com Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add.
- Adicione qualquer classe de filtro antifalsificação personalizada ou fornecida por Mvc que chame
Validateem qualquer classe que implemente a interface Microsoft.AspNetCore.Antiforgery.IAntiforgery.
Quando suprimir avisos
É seguro suprimir essa regra se soluções diferentes do uso de atributos de token antifalsificação são adotadas para mitigar vulnerabilidades de CSRF. Para obter mais informações, consulte Impedir ataques de XSRF/CSRF (solicitação intersite forjada) no ASP.NET Core.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar 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 em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5391.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Configurar código para analisar
Você pode configurar se a regra se aplica somente a classes derivadas de Microsoft.AspNetCore.Mvc.Controller da sua base de 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 no 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 antifalsificaçã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;
}
}
Usar 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));
}
}