CA5368: Nastavení ViewStateUserKey pro třídy odvozené ze stránky

Vlastnost Hodnota
ID pravidla CA5368
Název Pro třídy odvozené z Page nastavte ViewStateUserKey.
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

Vlastnost Page.ViewStateUserKey není přiřazena ani Page.OnInit metoda Page_Init .

Popis pravidla

Při navrhování webového formuláře ASP.NET mějte na paměti útoky na padělání žádostí mezi weby (CSRF). Útok CSRF může odesílat škodlivé požadavky ověřeného uživatele do webového formuláře ASP.NET.

Jedním ze způsobů ochrany před útoky CSRF ve webovém formuláři ASP.NET je nastavení stránky ViewStateUserKey na řetězec, který je nepředvídatelný a jedinečný pro relaci. Další informace najdete v tématu Využití výhod ASP.NET integrovaných funkcí pro útoky fend off web.

Jak opravit porušení

ViewStateUserKey Nastavte vlastnost na nepředvídatelný a jedinečný řetězec pro každou relaci. Pokud například použijete ASP.NET stav relace, HttpSessionState.SessionID bude fungovat.

Kdy potlačit upozornění

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

  • Stránka webového formuláře ASP.NET neprovádí citlivé operace.
  • Útoky na padělání požadavků mezi weby se zmírňují způsobem, který toto pravidlo nezjistí. Pokud například stránka dědí ze stránky předlohy, která obsahuje ochranu CSRF.

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 CA5368
// The code that's violating the rule is on this line.
#pragma warning restore CA5368

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.CA5368.severity = none

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

Příklady pseudokódu

Porušení

using System;
using System.Web.UI;

class ExampleClass : Page
{
    protected override void OnInit (EventArgs e)
    {
    }
}

Řešení

using System;
using System.Web.UI;

class ExampleClass : Page
{
    protected override void OnInit (EventArgs e)
    {
        // Assuming that your page makes use of ASP.NET session state and the SessionID is stable.
        ViewStateUserKey = Session.SessionID;
    }
}