Compartilhar via


CA3147: Marcar manipuladores de verbo com ValidateAntiForgeryToken

Property Valor
ID da regra CA3147
Título Marcar manipuladores de verbo com ValidateAntiForgeryToken
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

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

Descrição da regra

Ao criar um controlador MVC do ASP.NET, tenha atenção quanto a ataques CSRF (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. Para obter mais informações, consulte prevenção XSRF/CSRF em ASP.NET MVC e páginas da Web.

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

Como corrigir violações

  • Para ASP.NET ações do controlador MVC que lidam com solicitações HTTP GET e não têm efeitos colaterais potencialmente prejudiciais, adicione um HttpGetAttribute ao método.

    Se você tiver uma ação do controlador ASP.NET MVC que lida com solicitações HTTP GET e tem efeitos colaterais potencialmente prejudiciais, como modificar dados confidenciais, o aplicativo ficará vulnerável a ataques de falsificação de solicitação entre sites. Será necessário reprojetar o aplicativo para que somente solicitações HTTP POST, PUT ou DELETE realizem as operações confidenciais.

  • Para ações do controlador ASP.NET MVC que lidam com solicitações HTTP POST, PUT ou DELETE, adicione ValidateAntiForgeryTokenAttribute e atributos que especificam os verbos HTTP permitidos (AcceptVerbsAttribute, HttpPostAttribute, HttpPutAttribute ou HttpDeleteAttribute). Além disso, será necessário chamar o método HtmlHelper.AntiForgeryToken() da exibição do MVC ou página da Web Razor. Para obter um exemplo, consulte Examinar os métodos de edição e editar o modo de exibição.

Quando suprimir avisos

É seguro suprimir um aviso dessa regra se:

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

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

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.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;
        }
    }
}