CA2153: A sérült állapot kivételei kezelésének elkerülése
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2153 |
Cím | Sérült állapot kivételei kezelésének elkerülése |
Kategória | Biztonság |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
A sérült állapotkivételek (C Standard kiadás) azt jelzik, hogy a folyamat memóriasérülést jelez. Ha ezeket észleli ahelyett, hogy lehetővé tenné a folyamat összeomlását, biztonsági résekhez vezethet, ha a támadó biztonsági réseket helyezhet el a sérült memóriaterületen.
Szabály leírása
A C Standard kiadás azt jelzi, hogy egy folyamat állapota sérült, és a rendszer nem észlelte. Sérült állapot esetén az általános kezelő csak akkor kapja meg a kivételt, ha a metódust az System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute attribútummal jelöli meg. Alapértelmezés szerint a Common Language Runtime (CLR) nem hívja meg a C Standard kiadás-ek fogáskezelőit.
A legbiztonságosabb megoldás, ha engedélyezi a folyamat összeomlását az ilyen típusú kivételek észlelése nélkül. Még a naplózási kód is lehetővé teszi a támadók számára a memóriasérülési hibák kihasználását.
Ez a figyelmeztetés a C Standard kiadás általános kezelővel való elfogásakor aktiválódik, amely minden kivételt, például catch (System.Exception e)
catch
kivételparamétert vagy kivételparamétert is elkap.
Szabálysértések kijavítása
A figyelmeztetés feloldásához tegye az alábbiak egyikét:
Távolítsa el az HandleProcessCorruptedStateExceptionsAttribute attribútumot. Ez visszaáll az alapértelmezett futásidejű viselkedésre, ahol a C Standard kiadás nem lesz átadva a fogáskezelőknek.
Távolítsa el az általános fogáskezelőt az olyan kezelők előnyben részesítése esetén, amelyek bizonyos kivételtípusokat észlelnek. Ilyenek lehetnek a C Standard kiadás, feltéve, hogy a kezelőkód képes biztonságosan kezelni őket (ritka).
A C Standard kiadás újbóli indítása a fogáskezelőben, amely átadja a kivételt a hívónak, és a futó folyamat befejezését eredményezi.
Mikor kell letiltani a figyelmeztetéseket?
Ne tiltsa el a szabály figyelmeztetését.
Példa pszeudokódra
Megsértése
Az alábbi pszeudokód a szabály által észlelt mintát mutatja be.
[HandleProcessCorruptedStateExceptions]
// Method that handles CSE exceptions.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
1. megoldás – az attribútum eltávolítása
Az attribútum eltávolítása biztosítja, hogy a HandleProcessCorruptedStateExceptionsAttribute sérült állapot kivételeit a metódus ne kezelje.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
2. megoldás – adott kivételek elfogása
Távolítsa el az általános fogáskezelőt, és csak bizonyos kivételtípusokat fog.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (IOException e)
{
// Handle IOException.
}
catch (UnauthorizedAccessException e)
{
// Handle UnauthorizedAccessException.
}
}
3. megoldás – újrafedés
A kivétel újbóli megismétlése.
[HandleProcessCorruptedStateExceptions]
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Rethrow the exception.
throw;
}
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: