CA5368: Definir ViewStateUserKey para as classes derivadas da página
Property | Valor |
---|---|
ID da regra | CA5368 |
Título | Definir ViewStateUserKey para as classes derivadas da página |
Categoria | Segurança |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Não |
Causa
A propriedade Page.ViewStateUserKey não é atribuída em Page.OnInit ou ao método Page_Init
.
Descrição da regra
Ao projetar um formulário da Web ASP.NET, esteja atento aos ataques de CSRF (solicitação intersite forjada). Um ataque de CSRF pode enviar solicitações mal-intencionadas de um usuário autenticado ao formulário da Web ASP.NET.
Uma maneira de proteger contra ataques de CSRF no Formulário da Web ASP.NET é definir ViewStateUserKey de uma página como uma cadeia de caracteres imprevisível e exclusiva para uma sessão. Para obter mais informações, consulte Aproveitar os recursos internos do ASP.NET para defender-se contra os ataques na Web.
Como corrigir violações
Defina a propriedade ViewStateUserKey como uma cadeia de caracteres imprevisível e exclusiva por sessão. Por exemplo, se você usar o estado de sessão do ASP.NET, HttpSessionState.SessionID funcionará.
Quando suprimir avisos
É seguro suprimir um aviso dessa regra se:
- A página do Formulário da Web ASP.NET não executa as operações confidenciais.
- Os ataques de solicitação intersite forjada são reduzidos de uma maneira que essa regra não detecta. Por exemplo, se a página herdar de uma página mestra contendo defesas de CSRF.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA5368
// The code that's violating the rule is on this line.
#pragma warning restore CA5368
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5368.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação
using System;
using System.Web.UI;
class ExampleClass : Page
{
protected override void OnInit (EventArgs e)
{
}
}
Solução
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;
}
}