Passez en revue les gestionnaires d'événements visibles
Mise à jour : novembre 2007
TypeName |
ReviewVisibleEventHandlers |
CheckId |
CA2109 |
Catégorie |
Microsoft.Security |
Modification avec rupture |
Oui |
Cause
Une méthode de gestion d'événements publique ou protégée a été détectée.
Description de la règle
Une méthode de gestion d'événements visible de l'extérieur présente un problème de sécurité qui requiert une révision.
Les méthodes de gestion d'événements ne doivent pas être exposées sauf nécessité absolue. Un gestionnaire d'événements, un type délégué, qui appelle la méthode exposée peut être ajouté à tout événement tant que le gestionnaire et les signatures d'événement correspondent. Les événements peuvent être potentiellement déclenchés par tout code et sont fréquemment déclenchés par un code système doté d'une confiance très élevée, en réponse à des actions de l'utilisateur, telles qu'un clic sur un bouton. L'ajout d'une vérification de la sécurité à une méthode de gestion d'événements n'empêche pas un code d'enregistrer 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é contribuent à protéger le code contre les appelants non approuvés par l'examen de ces derniers sur la pile des appels. Un 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 de ce gestionnaire s'exécutent. Par conséquent, la pile des appels peut ne présenter que des appelants dotés d'une confiance très élevée lorsque la méthode du gestionnaire d'événements est appelée, ce qui entraîne l'aboutissement des demandes émises par la méthode du gestionnaire d'événements. De plus, l'autorisation demandée peut être déclarée lorsque la méthode est appelée. Pour ces raisons, le risque lié à la correction d'une violation de cette règle ne peut être évalué qu'après avoir passé en revue la méthode de gestion d'événements. Lorsque vous passez en revue votre code, tenez compte des problèmes suivants :
Est-ce que votre gestionnaire d'événements exécute des opérations dangereuses ou exploitables, telles que la déclaration d'autorisations ou la suppression de l'autorisation d'un code non managé ?
En termes de sécurité, quelles menaces peuvent pénétrer votre code ou en sortir sachant qu'il peut s'exécuter n'importe quand uniquement avec des appelants dotés d'une confiance très élevée sur la pile ?
Comment corriger les violations
Pour corriger une violation de cette règle, révisez la méthode et évaluez les éléments suivants :
Pouvez-vous rendre la méthode de gestion d'événements non publique ?
Pouvez-vous placer toutes les fonctionnalités dangereuses hors du gestionnaire d'événements ?
Si une demande de sécurité est imposée, peut-elle l'être 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é méticuleuse afin de s'assurer que votre code ne constitue pas une menace pour la sécurité.
Exemple
Le code suivant présente une méthode de gestion d'événements qui peut être employée à des fins préjudiciables par un code malveillant.
using System;
using System.Security;
using System.Security.Permissions;
namespace EventSecLibrary
{
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.");
}
}
}