Freigeben über


CA2124: Anfällige finally-Klauseln mit äußerem try-Block umschließen.

Element Wert
RuleId CA2124
Category Microsoft.Security
Unterbrechende Änderung Nicht unterbrechend

Ursache

In den .NET Framework-Versionen 1.0 und 1.1 enthält eine öffentliche oder geschützte Methode einen try//catchfinally-Block. Durch den finally-Block, der nicht wiederum in einen finally-Block eingeschlossen ist, wird der Sicherheitsstatus zurückgesetzt.

Hinweis

Diese Regel wurde als veraltet markiert. Weitere Informationen finden Sie unter Veraltete Regeln.

Regelbeschreibung

Diese Regel sucht try/finally-Blöcke im Code, der auf die .NET Framework-Versionen 1.0 und 1.1 ausgerichtet ist. Diese Versionen sind möglicherweise anfällig für böswillige Ausnahmefilter in der Aufrufliste. Wenn vertrauliche Vorgänge wie Identitätswechsel im try-Block auftreten und eine Ausnahme ausgelöst wird, kann der Filter vor dem finally-Block ausgeführt werden. Für das Identitätswechselbeispiel bedeutet dies, dass der Filter als imitierte Benutzer*innen ausgeführt wird. Filter können derzeit nur in Visual Basic implementiert werden.

Hinweis

In der .NET Framework-Version 2.0 und höher schützt die Runtime automatisch einen try/ /catchfinally-Block vor böswilligen Ausnahmefiltern, wenn das Zurücksetzen direkt innerhalb der Methode erfolgt, die den Ausnahmeblock enthält.

Behandeln von Verstößen

Platzieren Sie das entpackte try/finally-Element in einem äußeren try-Block. Sehen Sie sich das folgende zweite Beispiel an. Dadurch wird die Ausführung von finally vor dem Filtercode erzwungen.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Pseudocodebeispiel

BESCHREIBUNG

Der folgende Pseudocode veranschaulicht das von dieser Regel erkannte Muster.

try {
   // Do some work.
   Impersonator imp = new Impersonator("John Doe");
   imp.AddToCreditCardBalance(100);
}
finally {
   // Reset security state.
   imp.Revert();
}

Der folgende Pseudocode zeigt das Muster, das Sie verwenden können, um Ihren Code zu schützen und diese Regel zu erfüllen.

try {
     try {
        // Do some work.
     }
     finally {
        // Reset security state.
     }
}
catch()
{
    throw;
}