CA3147: Werkwoordhandlers markeren met ValidateAntiForgeryToken
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA3147 |
Titel | Werkwoordhandlers markeren met ValidateAntiForgeryToken |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Een ASP.NET actiemethode voor de MVC-controller is niet gemarkeerd met ValidateAntiForgeryTokenAttribute of een kenmerk dat het HTTP-werkwoord opgeeft, zoals HttpGetAttribute of AcceptVerbsAttribute.
Beschrijving van regel
Wanneer u een ASP.NET MVC-controller ontwerpt, moet u rekening houden met vervalsingsaanvallen op meerdere sites. Een aanval op aanvraagvervalsing op meerdere sites kan schadelijke aanvragen verzenden van een geverifieerde gebruiker naar uw ASP.NET MVC-controller. Zie XSRF/CSRF-preventie in ASP.NET MVC en webpagina's voor meer informatie.
Met deze regel wordt gecontroleerd of ASP.NET MVC-controlleractiemethoden:
Laat validateAntiforgeryTokenAttribute en geef toegestane HTTP-woorden op, niet inclusief HTTP GET.
Geef HTTP GET op als een toegestaan werkwoord.
Schendingen oplossen
Voor ASP.NET MVC-controlleracties die HTTP GET-aanvragen verwerken en geen mogelijk schadelijke bijwerkingen hebben, voegt u een HttpGetAttribute toe aan de methode.
Als u een ASP.NET MVC-controlleractie hebt die HTTP GET-aanvragen verwerkt en mogelijk schadelijke bijwerkingen heeft, zoals het wijzigen van gevoelige gegevens, is uw toepassing kwetsbaar voor vervalsingsaanvallen op meerdere sites. U moet uw toepassing opnieuw ontwerpen, zodat alleen HTTP POST-, PUT- of DELETE-aanvragen gevoelige bewerkingen uitvoeren.
Voor ASP.NET MVC-controlleracties die HTTP POST-, PUT- of DELETE-aanvragen verwerken, voegt u ValidateAntiForgeryTokenAttribute en kenmerken toe die de toegestane HTTP-woorden opgeven (AcceptVerbsAttribute, HttpPostAttribute, HttpPutAttribute of HttpDeleteAttribute). Daarnaast moet u de methode HtmlHelper.AntiForgeryToken() aanroepen vanuit uw MVC-weergave of Razor-webpagina. Zie De bewerkingsmethoden bekijken en de bewerkingsweergave bekijken voor een voorbeeld.
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken als:
- De actie ASP.NET MVC-controller heeft geen schadelijke bijwerkingen.
- De toepassing valideert het antiforgery-token op een andere manier.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA3147
// The code that's violating the rule is on this line.
#pragma warning restore CA3147
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA3147.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Voorbeeld van het kenmerk ValidateAntiForgeryToken
Schending:
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;
}
}
}
Oplossing:
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;
}
}
}
Voorbeeld van httpGet-kenmerk
Schending:
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;
}
}
}
Oplossing:
namespace TestNamespace
{
using System.Web.Mvc;
public class TestController : Controller
{
[HttpGet]
public ActionResult Help(int topicId)
{
return null;
}
}
}