Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Egenskap | Värde |
|---|---|
| Regel-ID | CA5391 |
| Title | Använd anti-forgery-token i ASP.NET Core MVC-styrenheter |
| Kategori | Säkerhet |
| Korrigeringen är antingen invasiv eller icke-invasiv | Oumbrytbar |
| Aktiverad som standard i .NET 10 | Nej |
| Tillämpliga språk | C# och Visual Basic |
Orsak
Åtgärder som resulterar i att operationer ändras har inget attribut för antiförfalsknings-token. Eller använda ett globalt antiförfalskningstokenfilter utan att anropa de förväntade funktionerna för antiförfalskningstoken.
Regelbeskrivning
Hantering av en POST, PUT, PATCHeller DELETE begäran utan att verifiera en antiforgery-token kan vara sårbart för förfalskningsattacker mellan webbplatser. En förfalskningsattack mellan webbplatser kan skicka skadliga begäranden från en autentiserad användare till din ASP.NET Core MVC-styrenhet.
Så här åtgärdar du överträdelser
- Markera ändringsåtgärden med ett giltigt attribut för antiforgerytoken:
- Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.
- Attribut vars namn är som
%Validate%Anti_orgery%Attribute.
- Lägg till det giltiga förfalskningstokenattributet i det globala filtret med Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add.
- Lägg till alla anpassade eller Mvc-angivna antiforgery-filterklasser som anropar
Validatepå alla klasser som implementerar Microsoft.AspNetCore.Antiforgery.IAntiforgery-gränssnittet.
När du ska ignorera varningar
Det är säkert att utelämna den här regeln om andra lösningar än att använda attribut för antiforgerytoken används för att minska CSRF-sårbarheter. Mer information finns i Förhindra XSRF-/CSRF-attacker (Cross-Site Request Forgery) i ASP.NET Core.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA5391
// The code that's violating the rule is on this line.
#pragma warning restore CA5391
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA5391.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Konfigurera kod för analys
Du kan konfigurera om regeln endast gäller för härledda klasser i Microsoft.AspNetCore.Mvc.Controller din kodbas. Om du till exempel vill ange att regeln inte ska köras på någon kod inom härledda typer av ControllerBaselägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:
dotnet_code_quality.CA5391.exclude_aspnet_core_mvc_controllerbase = true
Exempel på pseudokod
Utan överträdelse av attributet för anti-förfalskningstoken
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[HttpDelete]
public IActionResult ExampleAction(string actionName)
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction(string actionName)
{
return null;
}
}
Utan giltigt globalt förfalskningsfilter
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));
}
}
Markerad med en lösning för antiförfalskningstokenattribut
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult ExampleAction()
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction()
{
return null;
}
}
Använda ett giltigt globalt förfalskningsfilter
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));
}
}