Compartilhar via


CA5368: Definir ViewStateUserKey para as classes derivadas da página

Propriedade 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 Inquebrável
Habilitado por padrão no .NET 10 Não
Idiomas aplicáveis C# e Visual Basic

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 Web Form ASP.NET, esteja atento aos ataques de CSRF (Cross-Site Request Forgery). 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 ASP.NET Web Form não executa operações sensíveis.
  • Os ataques de falsificação de solicitação entre sites são mitigados de uma maneira que essa regra não consegue detectar. 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;
    }
}