Dela via


CA3147: Markera verbhanterare med ValidateAntiForgeryToken

Property Värde
Regel-ID CA3147
Title Markera verbhanterare med ValidateAntiForgeryToken
Kategori Säkerhet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 9 Nej

Orsak

En åtgärdsmetod för ASP.NET MVC-styrenhet är inte markerad med ValidateAntiForgeryTokenAttribute eller ett attribut som anger HTTP-verbet, till exempel HttpGetAttribute eller AcceptVerbsAttribute.

Regelbeskrivning

När du utformar en ASP.NET MVC-styrenhet bör du tänka på förfalskningsattacker mellan webbplatser. En förfalskningsattack mellan webbplatser kan skicka skadliga begäranden från en autentiserad användare till din ASP.NET MVC-styrenhet. Mer information finns i XSRF/CSRF-skydd i ASP.NET MVC och webbsidor.

Den här regeln kontrollerar att ASP.NET MVC-kontrollantens åtgärdsmetoder antingen:

Så här åtgärdar du överträdelser

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln om:

  • Åtgärden ASP.NET MVC-styrenhet har inga skadliga biverkningar.
  • Programmet validerar antiforgery-token på ett annat sätt.

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 CA3147
// The code that's violating the rule is on this line.
#pragma warning restore CA3147

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.CA3147.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

ValidateAntiForgeryToken-attributexempel

Kränkning:

namespace TestNamespace
{
    using System.Web.Mvc;

    public class TestController : Controller
    {
        public ActionResult TransferMoney(string toAccount, string amount)
        {
            // You don't want an attacker to specify to who and how much money to transfer.

            return null;
        }
    }
}

Lösning:

using System;
using System.Xml;

namespace TestNamespace
{
    using System.Web.Mvc;

    public class TestController : Controller
    {
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult TransferMoney(string toAccount, string amount)
        {
            return null;
        }
    }
}

Exempel på HttpGet-attribut

Kränkning:

namespace TestNamespace
{
    using System.Web.Mvc;

    public class TestController : Controller
    {
        public ActionResult Help(int topicId)
        {
            // This Help method is an example of a read-only operation with no harmful side effects.
            return null;
        }
    }
}

Lösning:

namespace TestNamespace
{
    using System.Web.Mvc;

    public class TestController : Controller
    {
        [HttpGet]
        public ActionResult Help(int topicId)
        {
            return null;
        }
    }
}