Bagikan melalui


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