CA3147: Contrassegnare i gestori di verbi con ValidateAntiForgeryToken

Proprietà valore
ID regola CA3147
Titolo Contrassegnare i gestori di verbi con ValidateAntiForgeryToken
Categoria Sicurezza
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 No

Causa

Un metodo di azione del controller MVC ASP.NET non è contrassegnato con ValidateAntiForgeryTokenAttribute o un attributo che specifica il verbo HTTP, ad esempio HttpGetAttribute o AcceptVerbsAttribute.

Descrizione regola

Quando si progetta un controller MVC ASP.NET, tenere presente gli attacchi di richiesta intersito falsi. Un attacco di richiesta intersito può inviare richieste dannose da un utente autenticato al controller MVC ASP.NET. Per altre informazioni, vedere Prevenzione XSRF/CSRF in ASP.NET MVC e pagine Web.

Questa regola verifica che ASP.NET metodi di azione del controller MVC:

Come correggere le violazioni

Quando eliminare gli avvisi

È possibile eliminare un avviso da questa regola se:

  • L'azione del controller MVC ASP.NET non ha effetti collaterali dannosi.
  • L'applicazione convalida il token antiforgery in modo diverso.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

#pragma warning disable CA3147
// The code that's violating the rule is on this line.
#pragma warning restore CA3147

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Esempio di attributo ValidateAntiForgeryToken

Violazione:

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

Soluzione:

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

Esempio di attributo HttpGet

Violazione:

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

Soluzione:

namespace TestNamespace
{
    using System.Web.Mvc;

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