Bagikan melalui


CA5374: Jangan gunakan XslTransform

Properti Nilai
ID Aturan CA5374
Judul Jangan gunakan XslTransform
Golongan Keamanan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Tidak

Penyebab

Membuat instans System.Xml.Xsl.XslTransform, yang tidak membatasi referensi eksternal yang berpotensi berbahaya atau mencegah skrip.

Deskripsi aturan

XslTransform rentan ketika beroperasi pada input yang tidak tepercaya. Serangan dapat mengeksekusi kode arbitrer.

Cara memperbaiki pelanggaran

Ganti XslTransform dengan System.Xml.Xsl.XslCompiledTransform. Untuk panduan selengkapnya, lihat [/dotnet/standard/data/xml/migrating-from-the-xsltransform-class].

Kapan harus menekan peringatan

Objek XslTransform , lembar gaya XSLT, dan data sumber XML semuanya berasal dari sumber 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 CA5374
// The code that's violating the rule is on this line.
#pragma warning restore CA5374

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

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Contoh kode semu

Pelanggaran

Saat ini, sampel pseudo-code berikut menggambarkan pola yang terdeteksi oleh aturan ini.

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

namespace TestForXslTransform
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a new XslTransform object.
            XslTransform xslt = new XslTransform();

            // Load the stylesheet.
            xslt.Load("https://server/favorite.xsl");

            // Create a new XPathDocument and load the XML data to be transformed.
            XPathDocument mydata = new XPathDocument("inputdata.xml");

            // Create an XmlTextWriter which outputs to the console.
            XmlWriter writer = new XmlTextWriter(Console.Out);

            // Transform the data and send the output to the console.
            xslt.Transform(mydata, null, writer, null);
        }
    }
}

Solusi

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

namespace TestForXslTransform
{
    class Program
    {
        static void Main(string[] args)
        {
            // Default XsltSettings constructor disables the XSLT document() function
            // and embedded script blocks.
            XsltSettings settings = new XsltSettings();

            // Execute the transform.
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load("https://server/favorite.xsl", settings, new XmlUrlResolver());
            xslt.Transform("inputdata.xml", "outputdata.html");
        }
    }
}