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 |
| Golongan | Keamanan |
| Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
| Diaktifkan secara default di .NET 10 | No |
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 status rusak, handler umum hanya menangkap pengecualian jika Anda menandai metode Anda dengan System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute atribut . Secara default, Common Language Runtime (CLR) tidak memanggil handler catch untuk CSEs.
Opsi paling aman adalah memungkinkan proses crash tanpa menangkap pengecualian semacam ini. Bahkan kode pengelogan dapat memungkinkan penyerang untuk mengeksploitasi bug kerusakan memori.
Peringatan ini memicu saat menangkap CSEs dengan handler 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 sebagai preferensi handler yang menangkap jenis pengecualian tertentu. Ini mungkin termasuk CSA, 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
Menghapus HandleProcessCorruptedStateExceptionsAttribute atribut memastikan 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 - rethrow
Menumbuhkan kembali pengecualian.
[HandleProcessCorruptedStateExceptions]
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Rethrow the exception.
throw;
}
}