Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA5391 |
| Title | Usare i token antifalsificazione nei controller di ASP.NET Core MVC |
| Categoria | Sicurezza |
| La correzione causa un'interruzione o meno | Non rompente |
| Abilitato per impostazione predefinita in .NET 10 | No |
| Linguaggi applicabili | C# e Visual Basic |
Causa
Le azioni che comportano la modifica delle operazioni non dispongono di un attributo token antiforgery. In alternativa, utilizzando un filtro globale per il token antifalsificazione senza chiamare le funzioni previste del token antifalsificazione.
Descrizione regola
La gestione di una richiesta POST, PUT, PATCH o DELETE senza convalidare un token antiforgery può essere vulnerabile agli attacchi di cross-site request forgery. Un attacco di falsificazione di richiesta intersito può inviare richieste dannose da un utente autenticato al controller ASP.NET Core MVC.
Come correggere le violazioni
- Contrassegnare l'azione di modifica con un attributo token antiforgery valido:
- Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.
- Attributo il cui nome è simile a
%Validate%Anti_orgery%Attribute.
- Aggiungere l'attributo del token forgery valido nel filtro globale con Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add.
- Aggiungere qualsiasi classe di filtro antiforgery personalizzata o fornita da Mvc che chiama
Validatein qualsiasi classe che implementa l'interfaccia Microsoft.AspNetCore.Antiforgery.IAntiforgery.
Quando eliminare gli avvisi
È sicuro eliminare questa regola se vengono adottate soluzioni diverse dall'uso degli attributi del token antiforgery per attenuare le vulnerabilità CSRF. Per ulteriori informazioni, vedere Prevenire gli attacchi da falsificazione di richieste tra siti (XSRF/CSRF) in ASP.NET Core.
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 CA5391
// The code that's violating the rule is on this line.
#pragma warning restore CA5391
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.CA5391.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Configurare il codice da analizzare
È possibile configurare se la regola si applica solo alle classi derivate di Microsoft.AspNetCore.Mvc.Controller nella codebase. Ad esempio, per specificare che la regola non deve essere eseguita in alcun codice all'interno di tipi derivati di ControllerBase, aggiungere la coppia chiave-valore seguente a un file con estensione editorconfig nel progetto:
dotnet_code_quality.CA5391.exclude_aspnet_core_mvc_controllerbase = true
Esempi di pseudo-codice
Senza violazione dell'attributo del token anti-falsificazione
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[HttpDelete]
public IActionResult ExampleAction(string actionName)
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction(string actionName)
{
return null;
}
}
Senza un filtro anti contraffazione globale valido
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction(string actionName)
{
return null;
}
[HttpDelete]
public IActionResult ExampleAction(string actionName)
{
return null;
}
}
class FilterClass : IAsyncAuthorizationFilter
{
public Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
return null;
}
}
class BlahClass
{
public static void BlahMethod()
{
FilterCollection filterCollection = new FilterCollection();
filterCollection.Add(typeof(FilterClass));
}
}
Contrassegnato con una soluzione di attributo token anti-falsità
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult ExampleAction()
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction()
{
return null;
}
}
Uso di un filtro anti-contraffazione globale valido
using System.Threading.Tasks;
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction()
{
return null;
}
[HttpDelete]
public IActionResult ExampleAction()
{
return null;
}
}
class FilterClass : IAsyncAuthorizationFilter
{
private readonly IAntiforgery antiforgery;
public FilterClass(IAntiforgery antiforgery)
{
this.antiforgery = antiforgery;
}
public Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
return antiforgery.ValidateRequestAsync(context.HttpContext);
}
}
class BlahClass
{
public static void BlahMethod()
{
FilterCollection filterCollection = new FilterCollection();
filterCollection.Add(typeof(FilterClass));
}
}