Bagikan melalui


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

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