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
//catch
finally
-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
/ /catch
finally
-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;
}
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für