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 9 | No |
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 Migrasi dari kelas XslTransform.
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");
}
}
}