Udostępnij za pośrednictwem


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.

Informacje dotyczące przestrogiPrzestroga

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