CA3147: Označte obslužné rutiny příkazů značkou ValidateAntiForgeryToken

Vlastnost Hodnota
ID pravidla CA3147
Název Označte obslužné rutiny příkazů pomocí ValidateAntiForgeryToken
Kategorie Zabezpečení
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 No

Příčina

Metoda akce kontroleru MVC ASP.NET není označena metodou ValidateAntiForgeryTokenAttribute nebo atribut určující příkaz HTTP, například HttpGetAttribute nebo AcceptVerbsAttribute.

Popis pravidla

Při návrhu kontroleru ASP.NET MVC mějte na paměti útoky typu útok na negery mezi weby. Útok na padělání požadavků mezi weby může posílat škodlivé požadavky ověřeného uživatele do kontroleru ASP.NET MVC. Další informace najdete v tématu Prevence XSRF/CSRF v ASP.NET MVC a webových stránkách.

Toto pravidlo zkontroluje, jestli ASP.NET metody akce kontroleru MVC:

Jak opravit porušení

  • Pro ASP.NET akce kontroleru MVC, které zpracovávají požadavky HTTP GET a nemají potenciálně škodlivé vedlejší účinky, přidejte do metody httpGetAttribute .

    Pokud máte akci kontroleru MVC ASP.NET, která zpracovává požadavky HTTP GET a má potenciálně škodlivé vedlejší účinky, jako je úprava citlivých dat, je vaše aplikace zranitelná vůči útokům na padělání požadavků mezi weby. Aplikaci budete muset přepracovat tak, aby citlivé operace prováděly jenom požadavky HTTP POST, PUT nebo DELETE.

  • Pro ASP.NET akce kontroleru MVC, které zpracovávají požadavky HTTP POST, PUT nebo DELETE, přidejte ValidateAntiForgeryTokenAttribute a atributy určující povolené příkazy HTTP (AcceptVerbsAttribute, HttpPostAttribute, HttpPutAttribute nebo HttpDeleteAttribute). Dále je nutné volat HtmlHelper.AntiForgeryToken() metodu z zobrazení MVC nebo webové stránky Razor. Příklad najdete v tématu Zkoumání metod úprav a zobrazení pro úpravy.

Kdy potlačit upozornění

Upozornění z tohoto pravidla je bezpečné potlačit, pokud:

  • Akce kontroleru ASP.NET MVC nemá žádné škodlivé vedlejší účinky.
  • Aplikace ověří token antiforgery jiným způsobem.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA3147
// The code that's violating the rule is on this line.
#pragma warning restore CA3147

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

[*.{cs,vb}]
dotnet_diagnostic.CA3147.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklad atributu ValidateAntiForgeryToken

Porušení:

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;
        }
    }
}

Řešení:

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;
        }
    }
}

Příklad atributu HttpGet

Porušení:

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;
        }
    }
}

Řešení:

namespace TestNamespace
{
    using System.Web.Mvc;

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