Share via


Sichtbare Ereignishandler überprüfen

     TypeName

ReviewVisibleEventHandlers

CheckId

CA2109

Kategorie

Microsoft.Security

Unterbrechende Änderung

Breaking

Ursache

Eine öffentliche oder geschützte Ereignisbehandlungsmethode wurde erkannt.

Regelbeschreibung

Eine extern sichtbare Ereignisbehandlungsmethode stellt ein Sicherheitsproblem dar, das eine Überprüfung erfordert.

Ereignisbehandlungsmethoden sollten nur dann verfügbar gemacht werden, wenn dies absolut notwendig ist. Ein Ereignishandler, ein Delegattyp, der die zur Verfügung gestellte Methode aufruft, kann einem beliebigen Ereignis hinzugefügt werden, solange die Signaturen des Handlers und des Ereignisses übereinstimmen. Ereignisse können durch jeden beliebigen Code ausgelöst werden und werden häufig als Reaktion auf Benutzeraktionen wie das Klicken auf eine Schaltfläche durch hoch vertrauenswürdigen Systemcode ausgelöst. Wenn Sie einer Ereignisbehandlungsmethode eine Sicherheitsüberprüfung hinzufügen, können Sie nicht verhindern, dass der Code einen Ereignishandler registriert, der die Methode aufruft.

Eine durch einen Ereignishandler aufgerufene Methode kann durch eine Anforderung nicht zuverlässig geschützt werden. Sicherheitsanforderungen tragen dazu bei, Code vor nicht vertrauenswürdigen Aufrufern zu schützen, indem die in der Aufrufliste enthaltenen Aufrufer geprüft werden. Code, mit dem einem Ereignis ein Ereignishandler hinzugefügt wird, ist nicht unbedingt zu dem Zeitpunkt in der Aufrufliste vorhanden, wenn die Methoden des Ereignishandlers ausgeführt werden. Daher verfügt die Aufrufliste eventuell ausschließlich über hoch vertrauenswürdige Aufrufer, wenn die Ereignishandlermethode aufgerufen wird, sodass Anforderungen der Ereignishandlermethode erfolgreich sind. Zudem wird beim Aufruf der Methode möglicherweise die angeforderte Berechtigung gewährt. Aus diesen Gründen kann das Risiko, das mit einem nicht behobenen Verstoß gegen diese Regel einhergeht, erst nach der Überprüfung der Ereignisbehandlungsmethode beurteilt werden. Berücksichtigen Sie bei der Überprüfung des Codes folgende Punkte:

  • Führt der Ereignishandler Vorgänge aus, die Risiken bergen oder ausgenutzt werden können, z. B. das Gewähren von Berechtigungen oder das Unterdrücken von Berechtigungen für nicht verwalteten Code?

  • Welchen Sicherheitsrisiken ist der Code ausgesetzt und welche Sicherheitsrisiken gehen vom Code aus, wenn feststeht, dass er jederzeit nur mit hoch vertrauenswürdigen Aufrufern in der Aufrufliste ausgeführt werden kann?

Behandlung von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, überprüfen Sie die Methode, und stellen Sie folgende Überlegungen an:

  • Können Sie die Ereignisbehandlungsmethode nichtöffentlich machen?

  • Können Sie alle Funktionen aus dem Ereignishandler entfernen, die ein Risiko bergen?

  • Wenn eine Sicherheitsanforderung auferlegt wird: Ist dies auch auf andere Weise möglich?

Warnungsausschluss

Schließen Sie eine Warnung dieser Regel nur nach einer sorgfältigen Überprüfung aus, um sicherzustellen, dass der Code kein Sicherheitsrisiko darstellt.

Beispiel

Der folgende Code zeigt eine Ereignisbehandlungsmethode, die von bösartigem Code missbraucht werden kann.

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.");
      }

   }
}

Siehe auch

Referenz

System.Security.CodeAccessPermission.Demand
System.EventArgs

Konzepte

Sicherheitsforderungen