CA3076: Güvensiz XSLT Betiği Yürütme
Özellik | Değer |
---|---|
Kural Kimliği | CA3076 |
Başlık | Güvensiz XSLT Betiği Yürütme |
Kategori | Güvenlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
.NET uygulamalarında Genişletilebilir Stil Sayfaları Dil Dönüşümleri 'ni (XSLT) güvenli olmayan bir şekilde yürütürseniz, işlemci hassas bilgileri saldırganlara ifşa edebilecek ve Hizmet Reddi ve Siteler Arası saldırılara yol açabilecek güvenilmeyen URI başvurularını çözebilir. Daha fazla bilgi için bkz . XSLT Güvenlik Konuları(.NET Kılavuzu).
Kural açıklaması
XSLT , XML verilerini dönüştürmeye yönelik bir World Wide Web Konsorsiyumu (W3C) standardıdır. XSLT genellikle XML verilerini HTML, sabit uzunlukta metin, virgülle ayrılmış metin veya farklı bir XML biçimi gibi diğer biçimlere dönüştürmek için stil sayfaları yazmak için kullanılır. Varsayılan olarak yasak olsa da, bunu projeniz için etkinleştirmeyi seçebilirsiniz.
Bir saldırı yüzeyini açığa çıkarmadığınızdan emin olmak için, XslCompiledTransform her zaman bu kural tetikler.Load kötü amaçlı betik işlemeye izin veren ve XmlResolver'nin XsltSettings güvenli olmayan birleşim örneklerini alır.
İhlalleri düzeltme
Güvenli olmayan XsltSettings bağımsız değişkenini XsltSettings ile değiştirin.Default veya belge işlevini ve betik yürütmeyi devre dışı bırakmış bir örnekle.
bağımsız değişkenini XmlResolver null veya örnekle XmlSecureResolver değiştirin.
Uyarıların ne zaman bastırılması gerekiyor?
Girişin güvenilir bir kaynaktan geldiğinin bilindiğinden emin değilseniz, bu uyarıdan bir kuralı gizlemeyin.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Sahte kod örnekleri
XsltSettings.TrustedXslt kullanan ihlal
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
}
}
}
XsltSettings.Default kullanan çözüm
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);
}
}
}
İhlal— belge işlevi ve betik yürütme devre dışı bırakılmaz
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 { }
}
}
}
Çözüm— belge işlevini ve betik yürütmeyi devre dışı bırakma
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 { }
}
}
}