Partilhar via


CA3147: Marcar manipuladores de verbos com ValidateAntiForgeryToken

Propriedade valor
ID da regra CA3147
Cargo Marcar manipuladores de verbos com ValidateAntiForgeryToken
Categoria Segurança
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Não

Causa

Um método de ação do controlador MVC ASP.NET não está marcado com ValidateAntiForgeryTokenAttribute, ou um atributo especificando o verbo HTTP, como HttpGetAttribute ou AcceptVerbsAttribute.

Descrição da regra

Ao projetar um controlador MVC ASP.NET, esteja atento aos 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. Para obter mais informações, consulte Prevenção de XSRF/CSRF em ASP.NET MVC e páginas da Web.

Esta regra verifica se ASP.NET métodos de ação do controlador MVC:

  • Tenha o ValidateAntiforgeryTokenAttribute e especifique verbos HTTP permitidos, não incluindo HTTP GET.

  • Especifique HTTP GET como um verbo permitido.

Como corrigir violações

Quando suprimir avisos

É seguro suprimir um aviso desta regra se:

  • A ação ASP.NET do controlador MVC não tem efeitos colaterais prejudiciais.
  • O aplicativo valida o token antifalsificação de uma maneira diferente.

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 CA3147
// The code that's violating the rule is on this line.
#pragma warning restore CA3147

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA3147.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Exemplo de atributo ValidateAntiForgeryToken

Violação:

namespace TestNamespace
{
    using System.Web.Mvc;

    public class TestController : Controller
    {
        public ActionResult TransferMoney(string toAccount, string amount)
        {
            // You don't want an attacker to specify to who and how much money to transfer.

            return null;
        }
    }
}

Solução:

using System;
using System.Xml;

namespace TestNamespace
{
    using System.Web.Mvc;

    public class TestController : Controller
    {
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult TransferMoney(string toAccount, string amount)
        {
            return null;
        }
    }
}

Exemplo de atributo HttpGet

Violação:

namespace TestNamespace
{
    using System.Web.Mvc;

    public class TestController : Controller
    {
        public ActionResult Help(int topicId)
        {
            // This Help method is an example of a read-only operation with no harmful side effects.
            return null;
        }
    }
}

Solução:

namespace TestNamespace
{
    using System.Web.Mvc;

    public class TestController : Controller
    {
        [HttpGet]
        public ActionResult Help(int topicId)
        {
            return null;
        }
    }
}