CA2153: Hindari menangani Pengecualian Status yang Rusak
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 9 | 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 run-time 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;
}
}