CA2109 : Passez en revue les gestionnaires d'événements visibles

Propriété Value
Identificateur de la règle CA2109
Titre Passez en revue les gestionnaires d'événements visibles
Catégorie Sécurité
Le correctif est cassant ou non cassant Rupture
Activé par défaut dans .NET 8 Non

Cause

Une méthode de gestion d’événements publique ou protégée a été détectée.

Notes

Cette règle est déconseillée. Le code a été envoyé pour la dernière fois avec le package NuGet Microsoft.CodeAnalysis.NetAnalyzers 7.0.0 et le SDK .NET 7.

La règle a été supprimée, car la menace que ayant fait l’objet d’un avertissement par l’analyseur (un intermédiaire non approuvé raccordant un gestionnaire d’événements privilégié à un demandeur d’événement privilégié) n’a pas existé depuis .NET Framework 4.5.

Description de la règle

Une méthode de gestion des événements visible en externe présente un problème de sécurité qui nécessite une révision.

N’exposez pas les méthodes de gestion des événements, sauf si c’est absolument nécessaire. Un gestionnaire d’événements, un type délégué, qui appelle la méthode exposée peut être ajouté à n’importe quel événement tant que le gestionnaire et les signatures d’événement correspondent. Les événements peuvent potentiellement être déclenchés par n’importe quel code et sont fréquemment déclenchés par du code système hautement approuvé en réponse aux actions utilisateur telles que cliquer sur un bouton. L’ajout d’une vérification de sécurité à une méthode de gestion des événements n’empêche pas le code d’inscrire un gestionnaire d’événements qui appelle la méthode.

Une demande ne peut pas protéger de manière fiable une méthode appelée par un gestionnaire d’événements. Les demandes de sécurité aident à protéger le code contre les appelants non approuvés en examinant les appelants sur la pile des appels. Le code qui ajoute un gestionnaire d’événements à un événement n’est pas nécessairement présent sur la pile des appels lorsque les méthodes du gestionnaire d’événements s’exécutent. Par conséquent, la pile des appels peut avoir uniquement des appelants hautement approuvés lorsque la méthode du gestionnaire d’événements est appelée. Cela entraîne la réussite des demandes effectuées par la méthode du gestionnaire d’événements. En outre, l’autorisation demandée peut être déclarée lorsque la méthode est appelée. Pour ces raisons, le risque d’absence de correction d’une violation de cette règle ne peut être évalué qu’après avoir examiné la méthode de gestion des événements. Lorsque vous passez en revue votre code, tenez compte des problèmes suivants :

  • Votre gestionnaire d’événements effectue-t-il des opérations dangereuses ou exploitables, telles que l’assertion d’autorisations ou la suppression d’autorisations de code non managées ?

  • Quelles sont les menaces de sécurité vers et depuis votre code, car elles peuvent s’exécuter à tout moment avec uniquement des appelants hautement approuvés sur la pile ?

Comment corriger les violations

Pour corriger une violation de cette règle, passez en revue la méthode et évaluez les éléments suivants :

  • Pouvez-vous rendre la méthode de gestion des événements non publique ?

  • Pouvez-vous déplacer toutes les fonctionnalités dangereuses hors du gestionnaire d’événements ?

  • Si une demande de sécurité est imposée, peut-on procéder d’une autre manière ?

Quand supprimer les avertissements

Supprimez un avertissement de cette règle uniquement après une révision de sécurité minutieuse pour vous assurer que votre code ne présente pas de menace de sécurité.

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 CA2109
// The code that's violating the rule is on this line.
#pragma warning restore CA2109

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.CA2109.severity = none

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

Exemple

Le code suivant montre une méthode de gestion des événements qui peut être utilisée de manière incorrecte par du code malveillant.

public class HandleEvents
{
    // Due to the access level and signature, a malicious caller could 
    // add this method to system-triggered events where all code in the call
    // stack has the demanded permission.

    // Also, the demand might be canceled by an asserted permission.

    [SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode = true)]

    // Violates rule: ReviewVisibleEventHandlers.
    public static void SomeActionHappened(Object sender, EventArgs e)
    {
        Console.WriteLine("Do something dangerous from unmanaged code.");
    }
}

Voir aussi