Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| 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 romboló vagy nem romboló | Nem törhető |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
| Alkalmazandó nyelvek | C# és Visual Basic |
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 hamisítás elleni jogkivonat érvényesítése nélkül történő kezelése sebezhető lehet keresztoldali kéréshamisítási támadásokkal szemben. A webhelyek közötti kérelemhamisítási támadás rosszindulatú kéréseket küldhet egy hitelesített felhasználó nevében az ASP.NET Core MVC-vezérlőhöz.
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á bármely egyéni vagy Mvc által biztosított antiforgery szűrőosztályt, amely meghívja a(z)
Validatefüggvényt bármelyik Microsoft.AspNetCore.Antiforgery.IAntiforgery interfészt megvalósító osztályon.
Mikor kell letiltani a figyelmeztetéseket?
Ezt a szabályt nyugodtan letilthatja, ha más megoldásokat alkalmaznak a CSRF sérülékenységeinek enyhítésére, nem az antiforgery token attribútumok használatával. 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 token attribútum 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ő hiányában
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 token attribútum segítségével 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));
}
}