CA3147: Označte obslužné rutiny HTTP metod atributem ValidateAntiForgeryToken

Vlastnost Hodnota
ID pravidla CA3147
Název Označte obslužné rutiny příkazů pomocí ValidateAntiForgeryToken
Kategorie Zabezpečení
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Ne
Příslušné jazyky C# a Visual Basic

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 cross-site request forgery (CSRF). Útok typu Cross-Site Request Forgery (CSRF) může z uživatelského účtu ověřeného uživatele posílat škodlivé požadavky na váš kontroler 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 akční metody kontroleru ASP.NET MVC buď:

Jak opravit porušení

  • Pro akce kontrolerů MVC v ASP.NET, které zpracovávají požadavky HTTP GET a nemají potenciálně škodlivé vedlejší účinky, přidejte 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). Je také nutné volat metodu HtmlHelper.AntiForgeryToken() ve zobrazení MVC nebo na webové stránce Razor. Příklad najdete v tématu Zkoumání metod úprav a pohledu 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;
        }
    }
}