CA2124: Kodowanie wrażliwych klauzul finally w zewnętrznym try
TypeName |
WrapVulnerableFinallyClausesInOuterTry |
CheckId |
CA2124 |
Kategoria |
Microsoft.Security |
Złamanie zmiany |
Bez podziału |
Przyczyna
W wersjach 1.0 i 1.1 .NET Framework, zawiera metody publiczne lub chronione try/catch/finally bloku.finally Bloku pojawia się, aby zresetować stan zabezpieczeń i nie jest ujęty w finally bloku.
Opis reguły
Ta reguła lokalizuje try/finally bloki kodu, który jest przeznaczony dla wersji 1.0, 1.1 .NET Framework , może być narażony na filtrów złośliwy wyjątków, które są obecne w stos wywołań.Jeśli wrażliwych operacje, takie jak Personifikacja występuje w bloku try, wyjątek, filtr można wykonać przed finally bloku.Na przykład personifikacji oznacza to, że filtr jest wykonywany jako personifikowanym użytkownikiem.Filtry są obecnie implementable tylko w języku Visual Basic.
Przestroga |
---|
Uwaga w wersji 2.0 lub nowszej z .NET Framework, aparat plików wykonywalnych automatycznie chroni try/catch/ finally zablokować z filtrów wyjątków złośliwy, jeśli zresetowanie występuje bezpośrednio wewnątrz metodę, która zawiera bloku wyjątków. |
Jak naprawić naruszenia
Umieścić nieopakowanych try/finally w bloku try zewnętrzne.Zobacz przykład drugiego, który następuje.Zmusza to finally do wykonania przed kodem filtru.
Kiedy do pomijania ostrzeżenia
Nie pomijaj ostrzeżenie od tej reguły.
Przykład pseudo-Code
Opis
Pseudo-code następujące ilustruje deseń wykrytych przez tę regułę.
Kod
try {
// Do some work.
Impersonator imp = new Impersonator("John Doe");
imp.AddToCreditCardBalance(100);
}
finally {
// Reset security state.
imp.Revert();
}
Przykład
Pseudo-code następujące Pokazuje deseń, można zabezpieczyć swój kod i spełniają tę regułę.
try {
try {
// Do some work.
}
finally {
// Reset security state.
}
}
catch()
{
throw;
}