CA5368: Ustaw właściwość ViewStateUserKey dla klas pochodnych ze strony
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA5368 |
Tytuł | Ustaw właściwość ViewStateUserKey dla klas pochodzących od klasy Page |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Właściwość nie jest przypisana Page.ViewStateUserKey w Page.OnInit metodzie Page_Init
lub .
Opis reguły
Podczas projektowania formularza internetowego ASP.NET należy pamiętać o atakach fałszerzowania żądań między witrynami (CSRF). Atak CSRF może wysyłać złośliwe żądania od uwierzytelnionego użytkownika do formularza internetowego ASP.NET.
Jednym ze sposobów ochrony przed atakami CSRF w formularzu internetowym ASP.NET jest ustawienie strony ViewStateUserKey na ciąg, który jest nieprzewidywalny i unikatowy dla sesji. Aby uzyskać więcej informacji, zobacz Korzystanie z wbudowanych funkcji ASP.NET do odpierania ataków internetowych.
Jak naprawić naruszenia
ViewStateUserKey Ustaw właściwość na nieprzewidywalny i unikatowy ciąg na sesję. Jeśli na przykład używasz ASP.NET stanu sesji, HttpSessionState.SessionID będzie działać.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli:
- Strona formularza internetowego ASP.NET nie wykonuje operacji poufnych.
- Ataki fałszercze żądań między lokacjami są ograniczane w sposób, w jaki ta reguła nie wykrywa. Jeśli na przykład strona dziedziczy ze strony wzorcowej zawierającej zabezpieczenia CSRF.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA5368
// The code that's violating the rule is on this line.
#pragma warning restore CA5368
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA5368.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Przykłady przykładów kodu przykładowego
Naruszenie
using System;
using System.Web.UI;
class ExampleClass : Page
{
protected override void OnInit (EventArgs e)
{
}
}
Rozwiązanie
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;
}
}