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