CA5391: Antiforgery tokenek használata ASP.NET Core MVC-vezérlőkben
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA5391 |
Cím | Antiforgery tokenek használata ASP.NET Core MVC-vezérlőkben |
Kategória | Biztonság |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
A módosítást eredményező műveletek nem rendelkeznek antiforgery token attribútummal. Vagy globális hamisítás elleni jogkivonat-szűrő használata a várt hamisítás elleni jogkivonat-függvények meghívása nélkül.
Szabály leírása
A POST
, , PUT
, PATCH
vagy DELETE
kérések antiforgery jogkivonat érvényesítése nélkül történő kezelése sebezhető lehet a helyek közötti hamisítási támadások ellen. A helyek közötti hamisítási támadások rosszindulatú kéréseket küldhetnek egy hitelesített felhasználótól a ASP.NET Core MVC-vezérlőnek.
Szabálysértések kijavítása
- Jelölje meg a módosító műveletet érvényes antiforgery token attribútummal:
- Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.
- Attribútum, amelynek a neve hasonló
%Validate%Anti_orgery%Attribute
.
- Adja hozzá az érvényes hamisítási jogkivonat attribútumot a globális szűrőhöz a következővel Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add: .
- Adjon hozzá minden olyan egyéni vagy Mvc által biztosított antiforgery szűrőosztályt, amely meghívja
Validate
a felületet megvalósító bármely osztályt Microsoft.AspNetCore.Antiforgery.IAntiforgery .
Mikor kell letiltani a figyelmeztetéseket?
Ezt a szabályt nyugodtan letilthatja, ha a CSRF biztonsági réseinek enyhítésére nem antiforgery tokenattribútumokat használ. További információ: A helyek közötti kérelemhamisítás (XSRF/CSRF) támadásainak megakadályozása a ASP.NET Core-ban.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA5391
// The code that's violating the rule is on this line.
#pragma warning restore CA5391
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA5391.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kód konfigurálása elemzéshez
Konfigurálhatja, hogy a szabály csak a kódbázis származtatott osztályaira Microsoft.AspNetCore.Mvc.Controller vonatkozik-e. Ha például meg szeretné adni, hogy a szabály ne fusson származtatott típusú ControllerBasekódon, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CA5391.exclude_aspnet_core_mvc_controllerbase = true
Példák pszeudokódokra
Hamisítás elleni jogkivonat attribútumának megsértése nélkül
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[HttpDelete]
public IActionResult ExampleAction (string actionName)
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction (string actionName)
{
return null;
}
}
Érvényes globális hamisítás elleni szűrő nélkül
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));
}
}
Hamisítás elleni jogkivonat attribútummegoldással jelölve
using Microsoft.AspNetCore.Mvc;
class ExampleController : Controller
{
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult ExampleAction ()
{
return null;
}
[ValidateAntiForgeryToken]
[HttpDelete]
public IActionResult AnotherAction ()
{
return null;
}
}
Érvényes globális hamisítás elleni szűrő használata
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));
}
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: