Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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;
}
}