Freigeben über


CA2109: Sichtbare Ereignishandler überprüfen.

Eigenschaft Wert
Regel-ID CA2109
Titel Sichtbare Ereignishandler überprüfen.
Kategorie Security
Fix führt oder führt nicht zur Unterbrechung Breaking
Standardmäßig in .NET 9 aktiviert No

Ursache

Eine öffentliche oder geschützte Ereignisbehandlungsmethode wurde erkannt.

Hinweis

Diese Regel wurde als veraltet markiert. Sie wurde zuletzt mit dem NuGet-Paket „Microsoft.CodeAnalysis.NetAnalyzers 7.0.0“ und dem .NET 7 SDK ausgeliefert.

Die Regel wurde entfernt, da die Bedrohung, vor der das Analysetool gewarnt hat (ein nicht vertrauenswürdiger Vermittler, der einen privilegierten Ereignishandler in einen privilegierten Ereignisaufrufer einbindet), seit .NET Framework 4.5 nicht mehr besteht.

Regelbeschreibung

Eine extern sichtbare Ereignisbehandlungsmethode stellt ein Sicherheitsproblem dar, das überprüft werden muss.

Legen Sie Ereignisbehandlungsmethoden nur dann offen, wenn dies unbedingt erforderlich ist. Ein Ereignishandler, ein Delegattyp, der die verfügbar gemachte Methode aufruft, kann beliebigen Ereignissen hinzugefügt werden, solange der Handler und die Ereignissignaturen einander entsprechen. Ereignisse können potenziell von einem beliebigen Code ausgelöst werden und werden häufig durch hochgradig vertrauenswürdigen Systemcodes als Reaktion auf Benutzeraktionen wie das Klicken auf eine Schaltfläche ausgelöst. Durch das Hinzufügen einer Sicherheitsüberprüfung zu einer Ereignisbehandlungsmethode wird nicht verhindert, dass Code einen Ereignishandler registriert, der die Methode aufruft.

Eine Anforderung kann eine Methode, die von einem Ereignishandler aufgerufen wird, nicht zuverlässig schützen. Sicherheitsanforderungen helfen dabei, den Code vor nicht vertrauenswürdigen Aufrufern zu schützen, indem die Aufrufer in den Aufruflisten untersucht werden. Code, der einem Ereignis einen Ereignishandler hinzufügt, ist nicht notwendigerweise in der Aufrufliste vorhanden, wenn die Methoden des Ereignishandlers ausgeführt werden. Daher verfügt die Aufrufliste möglicherweise nur über hochgradig vertrauenswürdige Aufrufer, wenn die Ereignishandlermethode aufgerufen wird. Dies bewirkt, dass die von der Ereignishandlermethode gemachten Anforderungen erfolgreich sind. Außerdem kann die angeforderte Berechtigung bestätigt werden, wenn die Methode aufgerufen wird. Aus diesen Gründen kann das Risiko, dass ein Verstoß gegen diese Regel nicht behoben werden kann, nur nach dem Überprüfen der Ereignisbehandlungsmethode bewertet werden. Wenn Sie den Code überprüfen, berücksichtigen Sie die folgenden Probleme:

  • Führt der Ereignishandler Vorgänge aus, die gefährlich oder ausnutzbar sind, z. B. das Erteilen von Berechtigungen oder das Unterdrücken der Berechtigung für nicht verwalteten Code?

  • Was sind die Sicherheitsbedrohungen für und aus Ihrem Code, da er jederzeit mit nur sehr vertrauenswürdigen Aufrufern in der Liste ausgeführt werden kann?

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, überprüfen Sie die Methode, und bewerten Sie Folgendes:

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

  • Können Sie alle gefährlichen Funktionen aus dem Ereignishandler verschieben?

  • Wenn ein Sicherheitsbedarf besteht, kann dies auf andere Weise erreicht werden?

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie eine Warnung aus dieser Regel nur nach einer sorgfältigen Sicherheitsüberprüfung, um sicherzustellen, dass Ihr Code keine Sicherheitsbedrohung darstellt.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Beispiel

Der folgende Code zeigt eine Ereignisbehandlungsmethode, die von schädlichem Code missbraucht werden kann.

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