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