CA3076: Spuštění nezabezpečeného skriptu XSLT
Vlastnost | Hodnota |
---|---|
ID pravidla | CA3076 |
Název | Spuštění nezabezpečeného skriptu XSLT |
Kategorie | Zabezpečení |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 8 | No |
Příčina
Pokud v aplikacích .NET spustíte nezabezpečené transformace jazyka XSLT (Extensible Stylesheets Language Transformations), procesor může vyřešit nedůvěryhodné odkazy URI, které by mohly útočníkům zpřístupnit citlivé informace, což vede k útokům typu Denial of Service a cross-site. Další informace najdete v tématu Aspekty zabezpečení XSLT(.NET Guide).
Popis pravidla
XSLT je standard W3C (World Wide Web Consortium) pro transformaci dat XML. XSLT se obvykle používá k zápisu šablon stylů pro transformaci dat XML do jiných formátů, jako je HTML, text s pevnou délkou, text oddělený čárkami nebo jiný formát XML. I když je ve výchozím nastavení zakázáno, můžete ho pro svůj projekt povolit.
Aby se zajistilo, že nevystavíte prostor pro útoky, toto pravidlo se aktivuje vždy, když XslCompiledTransform.Load přijímá nezabezpečené kombinace instancí a XmlResolver, což umožňuje zpracování škodlivých skriptůXsltSettings.
Jak opravit porušení
Nahraďte nezabezpečený argument Xslt Nastavení Xslt NastaveníDefault nebo instancí, která zakázala funkci dokumentu a provádění skriptu.
XmlResolver Nahraďte argument hodnotou null nebo XmlSecureResolver instancí.
Kdy potlačit upozornění
Pokud si nejste jistí, že vstup pochází z důvěryhodného zdroje, nepotlačujte pravidlo z tohoto upozornění.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklady pseudokódu
Porušení, které používá Xslt Nastavení. 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
}
}
}
Řešení, které používá Xslt Nastavení Výchozí
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);
}
}
}
Porušení – funkce dokumentu a spouštění skriptu nejsou zakázané.
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 { }
}
}
}
Řešení – zakázání funkce dokumentu a spouštění skriptů
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 { }
}
}
}