CA3076: Osäker XSLT-skriptkörning
Property | Värde |
---|---|
Regel-ID | CA3076 |
Title | Osäker XSLT-skriptkörning |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Om du kör XSLT (Extensible Stylesheets Language Transformations) i .NET-program på ett osäkert sätt kan processorn lösa obetrodda URI-referenser som kan avslöja känslig information för angripare, vilket leder till Denial of Service- och Cross-Site-attacker. Mer information finns i XSLT Security Considerations(.NET Guide).
Regelbeskrivning
XSLT är en W3C-standard (World Wide Web Consortium) för transformering av XML-data. XSLT används vanligtvis för att skriva formatmallar för att omvandla XML-data till andra format som HTML, text med fast längd, kommaavgränsad text eller ett annat XML-format. Även om det är förbjudet som standard kan du välja att aktivera det för projektet.
För att säkerställa att du inte exponerar en attackyta utlöses den här regeln när XslCompiledTransform.Load tar emot osäkra kombinationsinstanser av och XmlResolver, vilket tillåter bearbetning av XsltSettings skadliga skript.
Så här åtgärdar du överträdelser
Ersätt argumentet osäkra XsltSettings med XsltSettings.Default eller med en instans som har inaktiverat dokumentfunktionen och skriptkörningen.
XmlResolver Ersätt argumentet med null eller en XmlSecureResolver instans.
När du ska ignorera varningar
Om du inte är säker på att indata är kända för att komma från en betrodd källa ska du inte utelämna en regel från den här varningen.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
Överträdelse som använder 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
}
}
}
Lösning som använder 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);
}
}
}
Överträdelse – dokumentfunktionen och skriptkörningen har inte inaktiverats
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 { }
}
}
}
Lösning – inaktivera dokumentfunktion och skriptkörning
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 { }
}
}
}