CA3147: Oznaczanie procedur obsługi zleceń za pomocą tokenu ValidateAntiForgeryToken
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA3147 |
Tytuł | Oznaczanie procedur obsługi zleceń za pomocą tokenu ValidateAntiForgeryToken |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Metoda akcji kontrolera MVC ASP.NET nie jest oznaczona atrybutem ValidateAntiForgeryTokenAttribute lub atrybutem określającym czasownik HTTP, taki jak HttpGetAttribute lub AcceptVerbsAttribute.
Opis reguły
Podczas projektowania kontrolera MVC ASP.NET należy pamiętać o atakach fałszerzowania żądań obejmujących wiele lokacji. Atak z żądaniem fałszerzowania między witrynami może wysyłać złośliwe żądania od uwierzytelnionego użytkownika do kontrolera MVC ASP.NET. Aby uzyskać więcej informacji, zobacz XSRF/CSRF prevention in ASP.NET MVC and web pages (Zapobieganie XSRF/CSRF w ASP.NET MVC i stronach internetowych).
Ta reguła sprawdza, czy ASP.NET metody akcji kontrolera MVC:
Ustaw atrybut ValidateAntiforgeryTokenAttribute i określ dozwolone czasowniki HTTP, a nie w tym HTTP GET.
Określ http GET jako dozwolone zlecenie.
Jak naprawić naruszenia
W przypadku ASP.NET akcji kontrolera MVC, które obsługują żądania HTTP GET i nie mają potencjalnie szkodliwych skutków ubocznych, dodaj element HttpGetAttribute do metody .
Jeśli masz ASP.NET akcję kontrolera MVC, która obsługuje żądania HTTP GET i ma potencjalnie szkodliwe skutki uboczne, takie jak modyfikowanie poufnych danych, aplikacja jest podatna na ataki fałszerskie żądania obejmujące wiele witryn. Musisz przeprojektować aplikację, aby tylko żądania HTTP POST, PUT lub DELETE wykonywały poufne operacje.
W przypadku ASP.NET akcji kontrolera MVC obsługujących żądania HTTP POST, PUT lub DELETE dodaj atrybuty ValidateAntiForgeryTokenAttribute i atrybuty określające dozwolone czasowniki HTTP (AcceptVerbsAttribute, HttpPostAttribute, HttpPutAttribute lub HttpDeleteAttribute). Ponadto należy wywołać metodę HtmlHelper.AntiForgeryToken() z widoku MVC lub strony internetowej Razor. Aby zapoznać się z przykładem, zobacz Badanie metod edycji i widoku edycji.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli:
- Działanie kontrolera ASP.NET MVC nie ma szkodliwych skutków ubocznych.
- Aplikacja weryfikuje token antyforgery w inny sposób.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA3147
// The code that's violating the rule is on this line.
#pragma warning restore CA3147
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA3147.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Przykład atrybutu ValidateAntiForgeryToken
Naruszenie:
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;
}
}
}
Rozwiązanie 2.
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;
}
}
}
Przykład atrybutu HttpGet
Naruszenie:
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;
}
}
}
Rozwiązanie:
namespace TestNamespace
{
using System.Web.Mvc;
public class TestController : Controller
{
[HttpGet]
public ActionResult Help(int topicId)
{
return null;
}
}
}