Condividi tramite


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