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
Para ASP.NET ações do controlador MVC que manipulam 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 de controlador MVC ASP.NET que lida com solicitações HTTP GET e tenha efeitos colaterais potencialmente prejudiciais, como modificar dados confidenciais, seu aplicativo estará vulnerável a ataques de falsificação de solicitação entre sites. Você precisará redesenhar seu aplicativo para que apenas solicitações HTTP POST, PUT ou DELETE executem operações confidenciais.
Para ASP.NET ações do controlador MVC que manipulam solicitações HTTP POST, PUT ou DELETE, adicione ValidateAntiForgeryTokenAttribute e atributos especificando os verbos HTTP permitidos (AcceptVerbsAttribute, HttpPostAttribute, HttpPutAttribute ou HttpDeleteAttribute). Além disso, você precisa chamar o método HtmlHelper.AntiForgeryToken() de sua visualização MVC ou página da Web Razor. Para obter um exemplo, consulte Examinando os métodos de edição e o modo de exibição de edição.
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;
}
}
}