CA3076: Onveilige XSLT-scriptuitvoering
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA3076 |
Titel | Onveilige XSLT-scriptuitvoering |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Als u Extensible Stylesheets Language Transformations (XSLT) in .NET-toepassingen onveilig uitvoert, kan de processor niet-vertrouwde URI-verwijzingen oplossen die gevoelige informatie kunnen vrijgeven aan aanvallers, wat leidt tot Denial of Service- en Cross-Site-aanvallen. Zie xsLT-beveiligingsoverwegingen (.NET Guide) voor meer informatie.
Beschrijving van regel
XSLT is een W3C-standaard (World Wide Web Consortium) voor het transformeren van XML-gegevens. XSLT wordt meestal gebruikt om opmaakmodellen te schrijven om XML-gegevens te transformeren naar andere indelingen, zoals HTML, tekst met vaste lengte, door komma's gescheiden tekst of een andere XML-indeling. Hoewel dit standaard verboden is, kunt u ervoor kiezen om dit in te schakelen voor uw project.
Om ervoor te zorgen dat u geen kwetsbaarheid voor aanvallen weergeeft, wordt deze regel geactiveerd wanneer de XslCompiledTransform.Load ontvangt onveilige combinatie-exemplaren van XsltSettings en XmlResolver, waardoor schadelijke scriptverwerking mogelijk is.
Schendingen oplossen
Vervang het onveilige argument XsltSettings door XsltSettings.Default of met een exemplaar dat de documentfunctie en scriptuitvoering heeft uitgeschakeld.
Vervang het XmlResolver argument door null of een XmlSecureResolver exemplaar.
Wanneer waarschuwingen onderdrukken
Tenzij u zeker weet dat de invoer afkomstig is van een vertrouwde bron, moet u geen regel van deze waarschuwing onderdrukken.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Voorbeelden van pseudocode
Schending die gebruikmaakt van 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
}
}
}
Oplossing die gebruikmaakt van 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);
}
}
}
Schending: documentfunctie en scriptuitvoering niet uitgeschakeld
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 { }
}
}
}
Oplossing: documentfunctie en scriptuitvoering uitschakelen
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 { }
}
}
}