Sdílet prostřednictvím


Anfällige finally-Klauseln in äußerem try-Block einschließen

Aktualisiert: November 2007

     TypeName

WrapVulnerableFinallyClausesInOuterTry

CheckId

CA2124

Kategorie

Microsoft.Security

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Eine öffentliche oder geschützte Methode enthält einen try/finally-Block. Durch den finally-Block, der nicht in einen finally-Block eingeschlossen ist, wird anscheinend der Sicherheitszustand zurückgesetzt.

Regelbeschreibung

Von dieser Regel werden try/finally-Blöcke gesucht, die anfällig für böswillige Ausnahmefilter sein können, die in der Aufrufliste enthalten sind. Wenn vertrauliche Vorgänge wie ein Identitätswechsel im try-Block stattfinden und eine Ausnahme ausgelöst wird, kann der Filter vor dem finally-Block ausgeführt werden. Bei dem Beispiel mit Identitätswechsel bedeutet dies, dass der Filter als Benutzer ausgeführt wird, für den ein Identitätswechsel vorgenommen wurde. Filter können derzeit nur in Visual Basic implementiert werden.

Behandlung von Verstößen

Fügen Sie den allein stehenden try/finally-Block in einen äußeren try-Block ein. Vergleichen Sie das folgende zweite Beispiel. Dabei wird finally zwangsweise vor dem Filtercode ausgeführt.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel für Pseudocode

Beschreibung

Mit dem folgenden Pseudocode wird das von dieser Regel erkannte Muster veranschaulicht.

Code

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

Beispiel

Im folgenden Pseudocode wird das Muster dargestellt, das Sie verwenden können, um den Code zu schützen und diese Regel zu erfüllen.

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