CA5368 : Définir ViewStateUserKey pour les classes dérivées de Page

Propriété Value
Identificateur de la règle CA5368
Titre Définir ViewStateUserKey pour les classes dérivées de Page
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

La propriété Page.ViewStateUserKey n’est pas affectée dans Page.OnInit ou la méthode Page_Init.

Description de la règle

Lors de la conception d’un formulaire web ASP.NET, n’oubliez pas les attaques de falsification de requête intersite (CSRF). Une attaque CSRF peut envoyer des requêtes malveillantes d’un utilisateur authentifié à votre formulaire web ASP.NET.

Une façon de se protéger contre les attaques CSRF dans un formulaire web ASP.NET le ViewStateUserKey d’une page sur une chaîne imprévisible et unique à une session. Pour plus d’informations, consultez Utilisation des fonctionnalités intégrées ASP.NET pour repousser les attaques web.

Comment corriger les violations

Définissez la propriété ViewStateUserKey sur une chaîne imprévisible et unique par session. Par exemple, si vous utilisez l’état de session ASP.NET, HttpSessionState.SessionID fonctionnera.

Quand supprimer les avertissements

Il est sûr de supprimer un avertissement de cette règle si :

  • La page de formulaire web ASP.NET n’effectue pas d’opérations sensibles.
  • Les attaques de falsification de requêtes intersite sont atténuées d’une manière que cette règle ne détecte pas. Par exemple, si la page hérite d’une page master qui contient des défenses contre la falsification de requête intersites.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemples de pseudo-code

Violation

using System;
using System.Web.UI;

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

Solution

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