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:
Avere ValidateAntiforgeryTokenAttribute e specificare verbi HTTP consentiti, non incluso HTTP GET.
Specificare HTTP GET come verbo consentito.
Come correggere le violazioni
Per ASP.NET azioni del controller MVC che gestiscono le richieste HTTP GET e non hanno effetti collaterali potenzialmente dannosi, aggiungere un HttpGetAttribute al metodo .
Se si dispone di un'azione del controller MVC ASP.NET che gestisce le richieste HTTP GET e presenta effetti collaterali potenzialmente dannosi, ad esempio la modifica dei dati sensibili, l'applicazione è vulnerabile agli attacchi di richiesta intersito falsi. Sarà necessario riprogettare l'applicazione in modo che solo le richieste HTTP POST, PUT o DELETE eseguano operazioni sensibili.
Per ASP.NET azioni del controller MVC che gestiscono le richieste HTTP POST, PUT o DELETE, aggiungere ValidateAntiForgeryTokenAttribute e attributi che specificano i verbi HTTP consentiti (AcceptVerbsAttribute, HttpPostAttribute, HttpPutAttribute o HttpDeleteAttribute). Inoltre, è necessario chiamare il metodo HtmlHelper.AntiForgeryToken() dalla visualizzazione MVC o dalla pagina Web Razor. Per un esempio, vedere Esame dei metodi di modifica e visualizzazione di modifica.
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;
}
}
}