CA3077: Pemrosesan Tidak Aman dalam Desain API, Dokumen XML, dan Pembaca Teks XML
Properti | Nilai |
---|---|
ID Aturan | CA3077 |
Judul | Pemrosesan yang Tidak Aman dalam Desain API, Dokumen XML, dan Pembaca Teks XML |
Golongan | Keamanan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Saat merancang API yang berasal dari XMLDocument dan XMLTextReader, perhatikan DtdProcessing. Menggunakan instans DTDProcessing yang tidak aman saat mereferensikan atau menyelesaikan sumber entitas eksternal atau mengatur nilai tidak aman dalam XML dapat menyebabkan pengungkapan informasi.
Deskripsi aturan
Definisi Tipe Dokumen (DTD) adalah salah satu dari dua cara pengurai XML dapat menentukan validitas dokumen, seperti yang didefinisikan oleh World Wide Web Consortium (W3C) Extensible Markup Language (XML) 1.0. Aturan ini mencari properti dan instans di mana data yang tidak tepercaya diterima untuk memperingatkan pengembang tentang potensi ancaman Pengungkapan Informasi, yang dapat menyebabkan serangan Penolakan Layanan (DoS ). Aturan ini memicu ketika:
XmlDocument atau XmlTextReader kelas menggunakan nilai resolver default untuk pemrosesan DTD .
Tidak ada konstruktor yang ditentukan untuk kelas turunan XmlDocument atau XmlTextReader atau tidak ada nilai aman yang digunakan untuk XmlResolver.
Cara memperbaiki pelanggaran
Tangkap dan proses semua pengecualian XmlTextReader dengan benar untuk menghindari pengungkapan informasi jalur .
Gunakan XmlSecureResolveralih-alih XmlResolver untuk membatasi sumber daya yang dapat diakses XmlTextReader.
Kapan harus menekan peringatan
Kecuali Anda yakin bahwa input diketahui dari sumber tepercaya, jangan menekan aturan dari peringatan ini.
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 CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh kode semu
Pelanggaran
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
Solusi
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}