CA5368: Imposta ViewStateUserKey per le classi derivate dalla pagina
Proprietà | valore |
---|---|
ID regola | CA5368 |
Title | Impostare ViewStateUserKey per classi derivate da Page |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
La Page.ViewStateUserKey proprietà non è assegnata in Page.OnInit o nel Page_Init
metodo .
Descrizione regola
Quando si progetta un web form ASP.NET, tenere presente gli attacchi di richiesta intersito falsa (CSRF). Un attacco CSRF può inviare richieste dannose da un utente autenticato al ASP.NET Web Form.
Un modo per proteggere gli attacchi CSRF in ASP.NET Web Form consiste nell'impostare ViewStateUserKey una pagina su una stringa imprevedibile e univoca per una sessione. Per altre informazioni, vedere Sfruttare ASP.NET funzionalità predefinite per evitare attacchi Web.
Come correggere le violazioni
Impostare la ViewStateUserKey proprietà su una stringa imprevedibile e univoca per sessione. Ad esempio, se si usa ASP.NET stato sessione, HttpSessionState.SessionID funzionerà.
Quando eliminare gli avvisi
È possibile eliminare un avviso da questa regola se:
- La pagina ASP.NET Web Form non esegue operazioni sensibili.
- Gli attacchi di tipo cross-site request forgery vengono mitigati in modo che questa regola non rilevi. Ad esempio, se la pagina eredita da una pagina master che contiene difese CSRF.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA5368
// The code that's violating the rule is on this line.
#pragma warning restore CA5368
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA5368.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione
using System;
using System.Web.UI;
class ExampleClass : Page
{
protected override void OnInit (EventArgs e)
{
}
}
Soluzione
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;
}
}