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, 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

Vlastnost Page.ViewStateUserKey není přiřazena v Page.OnInit ani v metodě Page_Init.

Popis pravidla

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

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

Jak opravit porušení

Nastavte vlastnost ViewStateUserKey na nepředvídatelný a jedinečný řetězec pro každou relaci. Pokud použijete například stav relací ASP.NET, 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í z vzorové stránky, 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;
    }
}