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;
}