Bagikan melalui


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 8 Tidak

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;
    }
}