CA3076: Niezabezpieczone wykonywanie skryptu XSLT
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA3076 |
Tytuł | Niezabezpieczone wykonywanie skryptu XSLT |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
W przypadku wykonywania rozszerzalnych przekształceń języka arkuszy stylów (XSLT) w aplikacjach platformy .NET niezabezpieczony procesor może rozwiązać niezaufane odwołania identyfikatora URI, które mogą ujawnić poufne informacje osobom atakującym, co prowadzi do ataków typu "odmowa usługi" i "między witrynami". Aby uzyskać więcej informacji, zobacz XSLT Security Considerations(.NET Guide)(Zagadnienia dotyczące zabezpieczeń XSLT(.NET Guide).
Opis reguły
XSLT to standard World Wide Web Consortium (W3C) umożliwiający przekształcanie danych XML. XSLT jest zwykle używany do pisania arkuszy stylów w celu przekształcania danych XML w inne formaty, takie jak HTML, tekst o stałej długości, tekst rozdzielony przecinkami lub inny format XML. Mimo że jest to domyślnie zabronione, możesz wybrać opcję włączenia go dla projektu.
Aby upewnić się, że nie uwidaczniasz powierzchni ataków, ta reguła jest wyzwalana za każdym razem, gdy element XslCompiledTransform.Load odbiera niezabezpieczone wystąpienia kombinacji XsltSettings elementów i XmlResolver, które umożliwiają przetwarzanie złośliwych skryptów.
Jak naprawić naruszenia
Zastąp niezabezpieczony argument XsltSettings ciągiem XsltSettings.Default lub z wystąpieniem, które wyłączyło funkcję dokumentu i wykonywanie skryptu.
Zastąp XmlResolver argument wartością null lub wystąpieniem XmlSecureResolver .
Kiedy pomijać ostrzeżenia
Jeśli nie masz pewności, że dane wejściowe są znane z zaufanego źródła, nie pomijaj reguły z tego ostrzeżenia.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Przykłady przykładów kodu przykładowego
Naruszenie używające elementu 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
}
}
}
Rozwiązanie korzystające z elementu 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);
}
}
}
Naruszenie — funkcja dokumentu i wykonywanie skryptu nie są wyłączone
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 { }
}
}
}
Rozwiązanie — wyłączanie funkcji dokumentu i wykonywania skryptu
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 { }
}
}
}