Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Egenskap | Värde |
|---|---|
| Regel-ID | CA2153 |
| Title | Undvik att hantera undantag för skadat tillstånd |
| Kategori | Säkerhet |
| Korrigeringen är antingen invasiv eller icke-invasiv | Oumbrytbar |
| Aktiverad som standard i .NET 10 | Nej |
| Tillämpliga språk | C# och Visual Basic |
Orsak
Corrupted State Exceptions (CSE) indikerar att minneskorruption som finns i din process. Att fånga dessa i stället för att låta processen krascha kan leda till säkerhetsrisker om en angripare kan placera en exploatering i den skadade minnesregionen.
Regelbeskrivning
CSE indikerar att tillståndet för en process har skadats och inte fångats av systemet. I det korrupta tillståndssceniariot fångar en generell hanterare bara undantaget om du markerar din metod med System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute attributet. Som standardinställning anropar inte Common Language Runtime (CLR) catch-hanterare för CSEer.
Det säkraste alternativet är att låta processen krascha utan att fånga den här typen av undantag. Även loggningskod kan göra det möjligt för angripare att utnyttja minnesskadade buggar.
Den här varningen utlöses när du fångar upp CSE:er med en allmän hanterare som fångar upp alla undantag, catch (System.Exception e) till exempel eller catch utan undantagsparameter.
Så här åtgärdar du överträdelser
Lös den här varningen genom att göra något av följande:
Ta bort attributet HandleProcessCorruptedStateExceptionsAttribute . Detta återgår till standardkörningsbeteendet där CSE:er inte skickas till catch-hanterare.
Ta bort den allmänna catch-hanteraren till förmån för hanterare som fångar specifika undantagstyper. Detta kan omfatta CSE:er, förutsatt att hanteringskoden kan hantera dem på ett säkert sätt (sällsynt).
Återväxa CSE i catch-hanteraren, vilket skickar undantaget till anroparen och bör resultera i att körningsprocessen avslutas.
När du ska ignorera varningar
Ignorera inte en varning från den här regeln.
Exempel på pseudokod
Kränkning
Följande pseudokod illustrerar det mönster som identifierats av den här regeln.
[HandleProcessCorruptedStateExceptions]
// Method that handles CSE exceptions.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
Lösning 1 – ta bort attributet
Att ta bort HandleProcessCorruptedStateExceptionsAttribute-attributet säkerställer att undantag från skadade tillstånd inte hanteras av din metod.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
Lösning 2 – fånga specifika undantag
Ta bort den generella catch-hanteraren och fånga endast specifika undantagstyper.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (IOException e)
{
// Handle IOException.
}
catch (UnauthorizedAccessException e)
{
// Handle UnauthorizedAccessException.
}
}
Lösning 3 – omkasta
Kasta om undantaget.
[HandleProcessCorruptedStateExceptions]
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Rethrow the exception.
throw;
}
}