CA5391: Antiforgery-tokens gebruiken in ASP.NET Core MVC-controllers
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA5391 |
Titel | Antiforgery-tokens gebruiken in ASP.NET Core MVC-controllers |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Acties die resulteren in het wijzigen van bewerkingen hebben geen antiforgery-tokenkenmerk. Of gebruik een globaal antiforgery-tokenfilter zonder verwachte antivervalsingstokenfuncties aan te roepen.
Beschrijving van regel
Het verwerken van eenPOST
, PUT
PATCH
of aanvraag DELETE
zonder een antiforgery-token te valideren, kan kwetsbaar zijn voor vervalsingsaanvallen op meerdere sites. Een aanval op aanvraagvervalsing op meerdere sites kan schadelijke aanvragen van een geverifieerde gebruiker verzenden naar uw ASP.NET Core MVC-controller.
Schendingen oplossen
- Markeer de wijzigingsactie met een geldig antivervalsingstokenkenmerk:
- Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.
- Kenmerk waarvan de naam er als
%Validate%Anti_orgery%Attribute
volgt uitziet.
- Voeg het geldige tokenken toe aan het globale filter met Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add.
- Voeg een aangepaste of door Mvc geleverde antiforgery-filterklasse toe die aanroept
Validate
op een klasse die de Microsoft.AspNetCore.Antiforgery.IAntiforgery interface implementeert.
Wanneer waarschuwingen onderdrukken
Het is veilig om deze regel te onderdrukken als andere oplossingen dan het gebruik van antiforgery-tokenkenmerken worden gebruikt om CSRF-beveiligingsproblemen te beperken. Zie Cross-Site Request Forgery-aanvallen (XSRF/CSRF) voorkomen in ASP.NET Core voor meer informatie.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA5391
// The code that's violating the rule is on this line.
#pragma warning restore CA5391
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA5391.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Code configureren om te analyseren
U kunt configureren of de regel alleen van toepassing is op afgeleide klassen in Microsoft.AspNetCore.Mvc.Controller uw codebasis. Als u bijvoorbeeld wilt opgeven dat de regel niet mag worden uitgevoerd op code binnen afgeleide typen ControllerBase, voegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project:
dotnet_code_quality.CA5391.exclude_aspnet_core_mvc_controllerbase = true
Voorbeelden van pseudocode
Zonder schending van het tokenkenmerk antivervalsing
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[HttpDelete]
public IActionResult ExampleAction (string actionName)
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction (string actionName)
{
return null;
}
}
Zonder geldig globaal antivervalsingsfilter
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));
}
}
Gemarkeerd met een antivervalsingstokenkenoplossing
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult ExampleAction ()
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction ()
{
return null;
}
}
Een geldig globaal antivervalsingsfilter gebruiken
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));
}
}