CA5366: Menggunakan XmlReader Untuk XML Baca Himpunan Data
Properti | Nilai |
---|---|
ID Aturan | CA5366 |
Judul | Menggunakan XmlReader untuk Xml Baca Himpunan Data |
Golongan | Keamanan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Definisi Jenis Dokumen (DTD) mendefinisikan struktur dan elemen hukum serta atribut dokumen XML. Mengacu pada DTD dari sumber daya eksternal dapat menyebabkan potensi serangan Penolakan Serangan Layanan (DoS). Sebagian besar pembaca tidak dapat menonaktifkan pemrosesan DTD dan membatasi pemuatan referensi eksternal kecuali untuk System.Xml.XmlReader. Menggunakan pembaca lain ini untuk memuat XML dengan salah satu metode berikut akan memicu aturan ini:
Deskripsi aturan
Menggunakan System.Data.DataSet untuk membaca XML dengan data yang tidak tepercaya dapat memuat referensi eksternal yang berbahaya, yang harus dibatasi dengan menggunakan XmlReader dengan penyelesai aman atau dengan pemrosesan DTD yang dinonaktifkan.
Cara memperbaiki pelanggaran
Gunakan XmlReader atau kelas turunannya untuk membaca XML.
Kapan harus menekan peringatan
Sembunyikan peringatan dari aturan ini saat menangani sumber data tepercaya.
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 CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA5366.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh kode semu
Pelanggaran
using System.Data;
using System.IO;
public class ExampleClass
{
public void ExampleMethod()
{
new DataSet().ReadXml(new FileStream("xmlFilename", FileMode.Open));
}
}
Solusi
using System.Data;
using System.IO;
using System.Xml;
public class ExampleClass
{
public void ExampleMethod()
{
new DataSet().ReadXml(new XmlTextReader(new FileStream("xmlFilename", FileMode.Open)));
}
}