Share via


CA5368: Establecer ViewStateUserKey para clases derivadas de página

Propiedad Value
Identificador de la regla CA5368
Título Establecer ViewStateUserKey para clases derivadas de página
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

La propiedad Page.ViewStateUserKey no está asignada en Page.OnInit ni en el método Page_Init.

Descripción de la regla

Al diseñar un formulario de ASP.NET Web Forms, tenga en cuenta los ataques de falsificación de solicitud entre sitios (CSRF). Un ataque de CSRF puede enviar solicitudes malintencionadas desde un usuario autenticado a un formulario de ASP.NET Web Forms.

Una manera de protegerse contra ataques CSRF en un formulario de ASP.NET Web Forms es establecer ViewStateUserKey de una página en una cadena que sea imprevisible y única para una sesión. Para obtener más información, vea Cómo aprovechar las ventajas de las características integradas de ASP.NET para rechazar los ataques a través de Internet.

Cómo corregir infracciones

Establezca la propiedad ViewStateUserKey en una cadena única y imprevisible por sesión. Por ejemplo, si usa el estado de sesión ASP.NET, HttpSessionState.SessionID funcionará.

Cuándo suprimir las advertencias

Se puede suprimir una advertencia de esta regla si:

  • La página del formulario de ASP.NET Web Forms no realiza operaciones confidenciales.
  • Los ataques de falsificación de solicitudes entre sitios se mitigan de una manera que no detecta esta regla. Por ejemplo, si la página viene una página maestra que contiene defensas CSRF.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#pragma warning disable CA5368
// The code that's violating the rule is on this line.
#pragma warning restore CA5368

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplos de pseudocódigo

Infracción

using System;
using System.Web.UI;

class ExampleClass : Page
{
    protected override void OnInit (EventArgs e)
    {
    }
}

Solución

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