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:
Be ValidateAntiforgeryTokenAttribute och ange tillåtna HTTP-verb, inklusive INTE HTTP GET.
Ange HTTP GET som ett tillåtet verb.
Så här åtgärdar du överträdelser
För ASP.NET MVC-kontrollantåtgärder som hanterar HTTP GET-begäranden och inte har potentiellt skadliga biverkningar lägger du till en HttpGetAttribute i -metoden.
Om du har en ASP.NET MVC-kontrollantåtgärd som hanterar HTTP GET-begäranden och har potentiellt skadliga biverkningar som att ändra känsliga data, är ditt program sårbart för förfalskningsattacker mellan webbplatser. Du måste göra om programmet så att endast HTTP POST-, PUT- eller DELETE-begäranden utför känsliga åtgärder.
För ASP.NET MVC-kontrollantåtgärder som hanterar HTTP POST-, PUT- eller DELETE-begäranden lägger du till ValidateAntiForgeryTokenAttribute och attribut som anger de tillåtna HTTP-verben (AcceptVerbsAttribute, HttpPostAttribute, HttpPutAttribute eller HttpDeleteAttribute). Dessutom måste du anropa metoden HtmlHelper.AntiForgeryToken() från MVC-vyn eller Razor-webbsidan. Ett exempel finns i Undersöka redigeringsmetoderna och redigeringsvyn.
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;
}
}
}