CA5395: Miss HttpVerb-attribut för åtgärdsmetoder
Property | Värde |
---|---|
Regel-ID | CA5395 |
Title | Miss HttpVerb-attribut för åtgärdsmetoder |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Anger inte typen av HTTP-begäran uttryckligen för åtgärdsmetoder.
Regelbeskrivning
Alla åtgärdsmetoder som skapar, redigerar, tar bort eller på annat sätt ändrar data måste skyddas med antiforgery-attributet från förfalskningsattacker mellan webbplatser. Att utföra en GET-åtgärd bör vara en säker åtgärd som inte har några biverkningar och inte ändrar dina bevarade data.
Så här åtgärdar du överträdelser
Markera åtgärdsmetoderna med HttpVerb
attribut.
När du ska ignorera varningar
Det är säkert att ignorera varningar från den här regeln om:
- Du är säker på att ingen ändringsåtgärd sker i åtgärdsmetoden. Eller så är det inte en åtgärdsmetod alls.
- Andra lösningar än att använda attribut för förfalskningstoken används för att minska CSRF-sårbarheter. Mer information finns i Förhindra XSRF-/CSRF-attacker (Cross-Site Request Forgery) i ASP.NET Core.
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 CA5395
// The code that's violating the rule is on this line.
#pragma warning restore CA5395
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.CA5395.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
Kränkning
using Microsoft.AspNetCore.Mvc;
[ValidateAntiForgeryToken]
class BlahController : Controller
{
}
class ExampleController : Controller
{
public IActionResult ExampleAction()
{
return null;
}
}
Lösning
using Microsoft.AspNetCore.Mvc;
[ValidateAntiForgeryToken]
class BlahController : Controller
{
}
class ExampleController : Controller
{
[HttpGet]
public IActionResult ExampleAction()
{
return null;
}
}