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