CA2153: Bozuk Durum Özel Durumlarını işlemekten kaçının
Özellik | Değer |
---|---|
Kural Kimliği | CA2153 |
Başlık | Bozuk Durum Özel Durumlarını işlemekten kaçının |
Kategori | Güvenlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
Bozuk Durum Özel Durumları (CSE) işleminizde bellek bozulması olduğunu gösterir. İşlemin kilitlenmesine izin vermek yerine bunları yakalamak, bir saldırganın bozuk bellek bölgesine bir açık oluşturabilmesi durumunda güvenlik açıklarına yol açabilir.
Kural açıklaması
CSE, bir işlemin durumunun bozuk olduğunu ve sistem tarafından yakalanmadığını gösterir. Bozuk durum senaryosunda, genel işleyici yalnızca yönteminizi özniteliğiyle System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute işaretlerseniz özel durumu yakalar. Varsayılan olarak, Ortak Dil Çalışma Zamanı (CLR), CSE'ler için yakalama işleyicilerini çağırmaz.
En güvenli seçenek, bu tür özel durumları yakalamadan işlemin kilitlenmesine izin vermektir. Günlük kodu bile saldırganların bellek bozulması hatalarından yararlanmasına izin verebilir.
Bu uyarı, örneğin catch (System.Exception e)
tüm özel durumları yakalayan genel bir işleyiciyle veya catch
özel durum parametresi olmadan CSE'leri yakalarken tetiklenir.
İhlalleri düzeltme
Bu uyarıyı çözmek için aşağıdakilerden birini yapın:
özniteliğini HandleProcessCorruptedStateExceptionsAttribute kaldırın. Bu, CSE'lerin işleyicileri yakalamak için geçirilmediği varsayılan çalışma zamanı davranışına geri döner.
Belirli özel durum türlerini yakalayan işleyiciler tercihinde genel catch işleyicisini kaldırın. İşleyici kodunun bunları güvenli bir şekilde işleyebildiği varsayılarak (nadir) BU, CSE'leri içerebilir.
Özel durumu çağırana geçiren ve çalışan işlemin sona ermesi gereken catch işleyicisinde CSE'yi yeniden oluşturun.
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan uyarıyı bastırmayın.
Sahte kod örneği
Ihlal
Aşağıdaki sahte kod, bu kural tarafından algılanan deseni gösterir.
[HandleProcessCorruptedStateExceptions]
// Method that handles CSE exceptions.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
Çözüm 1 - özniteliğini kaldırma
özniteliğinin HandleProcessCorruptedStateExceptionsAttribute kaldırılması, Bozuk Durum Özel Durumlarının yönteminiz tarafından işlenmemesini sağlar.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
Çözüm 2 - belirli özel durumları yakalama
Genel catch işleyicisini kaldırın ve yalnızca belirli özel durum türlerini yakalayın.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (IOException e)
{
// Handle IOException.
}
catch (UnauthorizedAccessException e)
{
// Handle UnauthorizedAccessException.
}
}
Çözüm 3 - yeniden çatır
Özel durumu yeniden oluştur.
[HandleProcessCorruptedStateExceptions]
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Rethrow the exception.
throw;
}
}