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 9 | No |
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 XsltSettings yang tidak aman dengan XsltSettings.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 XsltSettings.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 XsltSettings.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 { }
}
}
}