Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| 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 10 | No |
Penyebab
Jika Anda menjalankan Extensible Stylesheets Language Transformations (XSLT) di aplikasi .NET dengan tidak aman, prosesor mungkin menyelesaikan referensi URI yang tidak tepercaya yang dapat mengungkapkan informasi sensitif kepada penyerang, yang mengarah pada penolakan layanan dan serangan lintas situs. Untuk informasi selengkapnya, lihat Pertimbangan Keamanan XSLT (Panduan.NET).
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 yang tidak aman
XsltSettingsdengan XsltSettings.Default atau dengan instans yang 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 { }
}
}
}
Nota
Mulai dari .NET 10, EnableScript properti ditandai sebagai usang dan menghasilkan peringatan SYSLIB0062. Pada .NET (Core), tidak perlu lagi mengatur properti ini secara eksplisit karena false eksekusi skrip tidak didukung.