Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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 10'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 güvenilmeyen URI başvurularını çözümleyip hizmet reddine ve siteler arası saldırılara yol açabilir. 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 XsltSettings'nin XmlResolver güvenli olmayan birleşim örneklerini alır.
İhlalleri düzeltme
- Güvenli olmayan
XsltSettingsbağımsız değişkeni XsltSettings.Default veya ile, belge işlevini ve betik yürütmeyi devre dışı bırakılmış bir örnekle değiştirin. - 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 noneolarak 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 { }
}
}
}
Uyarı
.NET 10'dan başlayarak özelliği EnableScript eski olarak işaretlenir ve uyarı SYSLIB0062oluşturur. Betik yürütme desteklenmediğinden .NET'te (Core) bu özelliği false açıkça ayarlamak artık gerekli değildir.