Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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 10 | No |
Příčina
Pokud v aplikacích .NET spustíte nezabezpečené transformace jazyka XSLT (Extensible Stylesheets Language Transformations), může procesor vyřešit nedůvěryhodné odkazy URI, které by mohly útočníkům zpřístupnit citlivé informace, což vede k útoku do odepření služby a útoků mezi weby. Další informace najdete v tématu Důležité informace o zabezpečení XSLT (Průvodce .NET).
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 XsltSettings, což umožňuje zpracování škodlivých skriptůXmlResolver.
Jak opravit porušení
- Nezabezpečený
XsltSettingsargument XsltSettings.Default nahraďte nebo za instanci, která je zakázaná funkce 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á 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
}
}
}
Řešení, které používá 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);
}
}
}
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 { }
}
}
}
Poznámka:
Počínaje rozhraním .NET 10 EnableScript je vlastnost označena jako zastaralá a generuje upozornění SYSLIB0062. V .NET (Core) už není nutné explicitně nastavit tuto vlastnost, false protože spouštění skriptu není podporováno.