Bagikan melalui


CA2109: Tinjau penanganan aktivitas yang terlihat

Properti Nilai
ID Aturan CA2109
Judul Tinjau penanganan aktivitas yang terlihat
Golongan Keamanan
Perbaikan bersifat disruptif atau non-disruptif Merusak
Diaktifkan secara default di .NET 8 Tidak

Penyebab

Metode penanganan aktivitas publik atau yang dilindungi telah terdeteksi.

Catatan

Aturan ini sudah tidak digunakan lagi. Terakhir dikirim dengan paket NuGet Microsoft.CodeAnalysis.NetAnalyzers 7.0.0 dan .NET 7 SDK.

Aturan dihapus karena ancaman yang diperingatkan penganalisis (perantara yang tidak tepercaya yang menghubungkan penanganan aktivitas istimewa ke pemanggil peristiwa istimewa) belum ada sejak .NET Framework 4.5.

Deskripsi aturan

Metode penanganan peristiwa yang terlihat secara eksternal menyajikan masalah keamanan yang memerlukan peninjauan.

Jangan mengekspos metode penanganan peristiwa kecuali benar-benar diperlukan. Penanganan aktivitas, jenis delegasi, yang memanggil metode yang diekspos dapat ditambahkan ke peristiwa apa pun selama penangan dan tanda tangan peristiwa cocok. Peristiwa berpotensi dimunculkan oleh kode apa pun, dan sering dimunculkan oleh kode sistem yang sangat tepercaya sebagai respons terhadap tindakan pengguna seperti mengklik tombol. Menambahkan pemeriksaan keamanan ke metode penanganan peristiwa tidak mencegah kode mendaftarkan penanganan aktivitas yang memanggil metode .

Permintaan tidak dapat melindungi metode yang dipanggil oleh penanganan aktivitas dengan andal. Tuntutan keamanan membantu melindungi kode dari penelepon yang tidak tepercaya dengan memeriksa penelepon pada tumpukan panggilan. Kode yang menambahkan penanganan aktivitas ke peristiwa belum tentu ada di tumpukan panggilan saat metode penanganan aktivitas berjalan. Oleh karena itu, tumpukan panggilan mungkin hanya memiliki penelepon yang sangat tepercaya ketika metode penanganan aktivitas dipanggil. Hal ini menyebabkan tuntutan yang dibuat oleh metode penanganan aktivitas berhasil. Selain itu, izin yang diminta mungkin ditegaskan ketika metode dipanggil. Untuk alasan ini, risiko tidak memperbaiki pelanggaran aturan ini hanya dapat dinilai setelah meninjau metode penanganan peristiwa. Saat Anda meninjau kode, pertimbangkan masalah berikut:

  • Apakah penanganan aktivitas Anda melakukan operasi apa pun yang berbahaya atau dapat dieksploitasi, seperti menegaskan izin atau menekan izin kode yang tidak dikelola?

  • Apa ancaman keamanan ke dan dari kode Anda karena dapat berjalan kapan saja dengan hanya penelepon yang sangat tepercaya di tumpukan?

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini, tinjau metode dan evaluasi hal berikut:

  • Dapatkah Anda membuat metode penanganan peristiwa non-publik?

  • Dapatkah Anda memindahkan semua fungsionalitas berbahaya dari penanganan aktivitas?

  • Jika permintaan keamanan diberlakukan, dapatkah ini dicapai dengan cara lain?

Kapan harus menekan peringatan

Tekan peringatan dari aturan ini hanya setelah tinjauan keamanan yang cermat untuk memastikan bahwa kode Anda tidak menimbulkan ancaman keamanan.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

#pragma warning disable CA2109
// The code that's violating the rule is on this line.
#pragma warning restore CA2109

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA2109.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Contoh

Kode berikut menunjukkan metode penanganan peristiwa yang dapat disalahgunakan oleh kode berbahaya.

public class HandleEvents
{
    // Due to the access level and signature, a malicious caller could 
    // add this method to system-triggered events where all code in the call
    // stack has the demanded permission.

    // Also, the demand might be canceled by an asserted permission.

    [SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode = true)]

    // Violates rule: ReviewVisibleEventHandlers.
    public static void SomeActionHappened(Object sender, EventArgs e)
    {
        Console.WriteLine("Do something dangerous from unmanaged code.");
    }
}

Baca juga