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 | CA2315 |
| Judul | Jangan gunakan deserializer ObjectStateFormatter yang tidak aman |
| Kategori | Keamanan |
| Perbaikan bersifat merusak atau tidak merusak | Tidak terputus |
| Diaktifkan secara default di .NET 10 | Tidak |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Metode System.Web.UI.ObjectStateFormatter deserialisasi dipanggil atau dirujuk.
Deskripsi aturan
Proses deserialisasi yang tidak aman rentan dalam konteks keamanan 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 System.Web.UI.ObjectStateFormatter panggilan atau referensi metode deserialisasi.
Cara memperbaiki pelanggaran
Jika memungkinkan, gunakan serializer yang aman sebagai gantinya, dan jangan izinkan penyerang menentukan tipe sembarang untuk dideserialisasi. Beberapa serializer yang lebih aman meliputi:
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer - Jangan pernah menggunakan System.Web.Script.Serialization.SimpleTypeResolver. Jika Anda harus menggunakan pemecah tipe, batasi tipe deserialisasi ke daftar yang diharapkan.
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET - Gunakan TypeNameHandling.None. Jika Anda harus menggunakan nilai lain untuk TypeNameHandling, batasi jenis deserialisasi ke daftar yang diharapkan menggunakan ISerializationBinder yang dikustomisasi.
- Protocol Buffers
Buat data yang diserialisasi agar tahan rusak. Setelah serialisasi, tanda tangani secara kriptografi data yang diserialisasi. Sebelum deserialisasi, validasi tanda tangan kriptografi. Lindungi kunci kriptografi agar tidak diungkapkan dan didesain untuk rotasi kunci.
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.
Contoh kode semu
Pelanggaran
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
ObjectStateFormatter formatter = new ObjectStateFormatter();
return formatter.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Web.UI
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim formatter As ObjectStateFormatter = New ObjectStateFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class