Megosztás a következőn keresztül:


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, PATCHvagy 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

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));
    }
}