Bagikan melalui


CA3076: Eksekusi Skrip XSLT Tidak Aman

Properti Nilai
ID Aturan CA3076
Judul Eksekusi Skrip XSLT tidak aman
Golongan Keamanan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Tidak

Penyebab

Jika Anda menjalankan Transformasi Bahasa Lembar Gaya yang Dapat Diperluas (XSLT) di aplikasi .NET dengan tidak aman, prosesor dapat menyelesaikan referensi URI yang tidak tepercaya yang dapat mengungkapkan informasi sensitif kepada penyerang, yang mengarah ke Penolakan Layanan dan serangan Lintas Situs. Untuk informasi selengkapnya, lihat Pertimbangan Keamanan XSLT(.NET Guide).

Deskripsi aturan

XSLT adalah standar World Wide Web Consortium (W3C) untuk mengubah data XML. XSLT biasanya digunakan untuk menulis lembar gaya untuk mengubah data XML ke format lain seperti HTML, teks panjang tetap, teks yang dipisahkan koma, atau format XML yang berbeda. Meskipun dilarang secara default, Anda dapat memilih untuk mengaktifkannya untuk proyek Anda.

Untuk memastikan Anda tidak mengekspos permukaan serangan, aturan ini memicu setiap kali XslCompiledTransform.Load menerima instans kombinasi yang tidak aman dari XsltSettings dan XmlResolver, yang memungkinkan pemrosesan skrip berbahaya.

Cara memperbaiki pelanggaran

  • Ganti argumen Xslt Pengaturan yang tidak aman dengan Xslt Pengaturan.Default atau dengan instans yang telah menonaktifkan fungsi dokumen dan eksekusi skrip.

  • XmlResolver Ganti argumen dengan null atau XmlSecureResolver instans.

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 CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Contoh kode semu

Pelanggaran yang menggunakan Xslt Pengaturan. TrustedXslt

using System.Xml;
using System.Xml.Xsl;

namespace TestNamespace
{
    class TestClass
    {
         void TestMethod()
        {
             XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
             var settings = XsltSettings.TrustedXslt;
             var resolver = new XmlUrlResolver();
             xslCompiledTransform.Load("testStylesheet", settings, resolver); // warn
        }
    }
}

Solusi yang menggunakan Xslt Pengaturan. Default

using System.Xml;
using System.Xml.Xsl;

namespace TestNamespace
{
    class TestClass
    {
        void TestMethod()
        {
            XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
            var settings = XsltSettings.Default;
            var resolver = new XmlUrlResolver();
            xslCompiledTransform.Load("testStylesheet", settings, resolver);
        }
    }
}

Pelanggaran—fungsi dokumen dan eksekusi skrip tidak dinonaktifkan

using System.Xml;
using System.Xml.Xsl;

namespace TestNamespace
{
    class TestClass
    {
        private static void TestMethod(XsltSettings settings)
        {
            try
            {
                XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
                var resolver = new XmlUrlResolver();
                xslCompiledTransform.Load("testStylesheet", settings, resolver); // warn
            }
            catch { throw; }
            finally { }
        }
    }
}

Solusi—nonaktifkan fungsi dokumen dan eksekusi skrip

using System.Xml;
using System.Xml.Xsl;

namespace TestNamespace
{
    class TestClass
    {
        private static void TestMethod(XsltSettings settings)
        {
            try
            {
                XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
                settings.EnableDocumentFunction = false;
                settings.EnableScript = false;
                var resolver = new XmlUrlResolver();
                xslCompiledTransform.Load("testStylesheet", settings, resolver);
            }
            catch { throw; }
            finally { }
        }
    }
}

Baca juga