CA5368: Definir ViewStateUserKey para classes derivadas da página

Propriedade valor
ID da regra CA5368
Cargo Definir ViewStateUserKey para classes derivadas da página
Categoria Segurança
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Não

Causa

A Page.ViewStateUserKey propriedade não é atribuída em Page.OnInit ou o Page_Init método.

Descrição da regra

Ao criar um formulário da Web ASP.NET, esteja atento aos ataques de falsificação de solicitação entre sites (CSRF). Um ataque CSRF pode enviar solicitações maliciosas de um usuário autenticado para seu formulário da Web ASP.NET.

Uma maneira de proteção contra ataques CSRF em ASP.NET formulário da Web é definindo uma página como uma cadeia de ViewStateUserKey caracteres imprevisível e exclusiva para uma sessão. Para obter mais informações, consulte Aproveite ASP.NET recursos internos para se defender de ataques da Web.

Como corrigir violações

Defina a ViewStateUserKey propriedade como uma cadeia de caracteres imprevisível e exclusiva por sessão. Por exemplo, se você usar ASP.NET estado de sessão, HttpSessionState.SessionID funcionará.

Quando suprimir avisos

É seguro suprimir um aviso desta regra se:

  • A página ASP.NET formulário da Web não executa operações confidenciais.
  • Os ataques de falsificação de solicitação entre sites são atenuados de uma forma que essa regra não deteta. Por exemplo, se a página herda de uma página mestra que contenha defesas CSRF.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA5368.severity = none

Para obter mais informações, consulte 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;
    }
}