Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA2153 |
| Başlık | Bozulmuş Durum İstisnalarını yakalamaktan kaçının |
| Kategori | Güvenlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
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, bir genel işleyici özel durumu yalnızca yönteminizi System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute özniteliğiyle işaretlediğinizde 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 istisnaları yakalamaya çalışmadan işlemin çökmesine 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 catch işleyicilerine geçirilmediği varsayılan çalışma zamanı davranışına döner.
Belirli özel durum türlerini yakalayan işleyicileri tercih ederek genel catch işleyicisini kaldırın. İşleyici kodunun nadir de olsa bunları güvenli bir şekilde işleyebildiği varsayılarak, 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 İstisnaları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 fırlat
Özel durumu yeniden oluştur.
[HandleProcessCorruptedStateExceptions]
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Rethrow the exception.
throw;
}
}