Bagikan melalui


CA2326: Jangan gunakan nilai TypeNameHandling selain None

Properti Nilai
ID Aturan CA2326
Judul Jangan gunakan nilai TypeNameHandling selain Tidak Ada
Golongan Keamanan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Tidak

Penyebab

Aturan ini diaktifkan ketika salah satu kondisi berikut terpenuhi:

Deskripsi aturan

Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya. Serangan terhadap pendeserialisasi yang tidak aman dapat, misalnya, menjalankan perintah pada sistem operasi dasar, berkomunikasi melalui jaringan, atau menghapus file.

Aturan ini menemukan nilai Newtonsoft.Json.TypeNameHandling selain None. Jika Anda ingin mendeserialisasi hanya ketika Newtonsoft.Json.Serialization.ISerializationBinder ditentukan untuk membatasi jenis yang dideserialisasi, nonaktifkan aturan ini dan aktifkan aturan CA2327, CA2328, CA2329, dan CA2330 sebagai gantinya.

Cara memperbaiki pelanggaran

Kapan harus menekan peringatan

Aman untuk menyembunyikan peringatan dari aturan ini jika:

  • Anda mengetahui bahwa input-nya tepercaya. Pertimbangkan bahwa batas kepercayaan dan aliran data aplikasi Anda dapat berubah dari waktu ke waktu.
  • Anda telah mengambil salah satu tindakan pencegahan dalam Cara memperbaiki pelanggaran.

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 CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326

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

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Contoh kode semu

Pelanggaran

using Newtonsoft.Json;

public class ExampleClass
{
    public JsonSerializerSettings Settings { get; }

    public ExampleClass()
    {
        Settings = new JsonSerializerSettings();
        Settings.TypeNameHandling = TypeNameHandling.All;    // CA2326 violation.
    }
}
Imports Newtonsoft.Json

Public Class ExampleClass
    Public ReadOnly Property Settings() As JsonSerializerSettings

    Public Sub New()
        Settings = New JsonSerializerSettings()
        Settings.TypeNameHandling = TypeNameHandling.All    ' CA2326 violation.
    End Sub
End Class

Solusi

using Newtonsoft.Json;

public class ExampleClass
{
    public JsonSerializerSettings Settings { get; }

    public ExampleClass()
    {
        Settings = new JsonSerializerSettings();

        // The default value of Settings.TypeNameHandling is TypeNameHandling.None.
    }
}
Imports Newtonsoft.Json

Public Class ExampleClass
    Public ReadOnly Property Settings() As JsonSerializerSettings

    Public Sub New()
        Settings = New JsonSerializerSettings()

        ' The default value of Settings.TypeNameHandling is TypeNameHandling.None.
    End Sub
End Class

CA2327: Jangan menggunakan JsonSerializerSettings yang tidak aman

CA2328: Pastikan JsonSerializerSettings aman

CA2329: Jangan mendeserialisasi dengan JsonSerializer menggunakan konfigurasi yang tidak aman

CA2330: Pastikan JsonSerializer memiliki konfigurasi yang aman saat mendeserialisasi