Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA2153 |
| Judul | Hindari menangani Pengecualian Status Yang Rusak |
| Kategori | Keamanan |
| Perbaikan bersifat merusak atau tidak merusak | Tidak terputus |
| Diaktifkan secara default di .NET 10 | Tidak |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Pengecualian Status Rusak (CSEs) menunjukkan bahwa kerusakan memori ada dalam proses Anda. Menangkap ini daripada membiarkan proses mengalami crash dapat menyebabkan kerentanan keamanan jika penyerang dapat menempatkan eksploitasi ke wilayah memori yang rusak.
Deskripsi aturan
CSE menunjukkan bahwa status proses telah rusak dan tidak tertangkap oleh sistem. Dalam skenario keadaan korup, handler generik hanya menangkap pengecualian jika Anda menandai metode Anda dengan atribut System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute. Secara default, Common Language Runtime (CLR) tidak memanggil handler catch untuk CSEs.
Opsi paling aman adalah membiarkan proses mengalami kegagalan tanpa menangkap pengecualian semacam ini. Bahkan kode pengelogan dapat memungkinkan penyerang untuk mengeksploitasi bug kerusakan memori.
Peringatan ini muncul ketika menangani CSEs dengan penangan umum yang menangkap semua pengecualian, misalnya, catch (System.Exception e) atau catch tanpa parameter pengecualian.
Cara memperbaiki pelanggaran
Untuk mengatasi peringatan ini, lakukan salah satu hal berikut:
HandleProcessCorruptedStateExceptionsAttribute Hapus atribut . Ini kembali ke perilaku runtime default di mana CSEs tidak diteruskan untuk menangkap handler.
Hapus handler tangkapan umum dan utamakan handler yang menangkap jenis pengecualian tertentu. Ini mungkin termasuk CSE, dengan asumsi kode handler dapat menanganinya dengan aman (jarang).
Menumbuhkan kembali CSE di handler tangkapan, yang meneruskan pengecualian ke pemanggil dan akan mengakibatkan mengakhiri proses yang sedang berjalan.
Kapan harus menekan peringatan
Jangan menyembunyikan peringatan dari aturan ini.
Contoh kode semu
Pelanggaran
Kode semu berikut mengilustrasikan pola yang terdeteksi oleh aturan ini.
[HandleProcessCorruptedStateExceptions]
// Method that handles CSE exceptions.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
Solusi 1 - hapus atribut
Dengan menghapus atribut HandleProcessCorruptedStateExceptionsAttribute, Anda menjamin bahwa Pengecualian Status Rusak tidak ditangani oleh metode Anda.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
Solusi 2 - menangkap pengecualian tertentu
Hapus handler tangkapan umum dan tangkap hanya jenis pengecualian tertentu.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (IOException e)
{
// Handle IOException.
}
catch (UnauthorizedAccessException e)
{
// Handle UnauthorizedAccessException.
}
}
Solusi 3 - lempar ulang
Lempar ulang pengecualian.
[HandleProcessCorruptedStateExceptions]
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Rethrow the exception.
throw;
}
}