Udostępnij za pośrednictwem


CA5372: Użyj XmlReader dla XPathDocument

Właściwości Wartość
Identyfikator reguły CA5372
Tytuł Używaj XmlReader dla XPathDocument
Kategoria Bezpieczeństwo
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Nie.
Zastosowane języki C# i Visual Basic

Przyczyna

XPathDocument Utworzenie egzemplarza klasy bez XmlReader obiektu może potencjalnie prowadzić do odmowy usługi, ujawnienia informacji i ataków polegających na fałszowaniu żądań po stronie serwera. Te ataki są włączane przez niezaufane przetwarzanie schematów DTD i XML, co umożliwia włączenie bomb XML i złośliwych jednostek zewnętrznych w formacie XML. Tylko z XmlReader można wyłączyć DTD. Wbudowane przetwarzanie schematu XML jako XmlReader ma właściwości ProhibitDtd i ProcessInlineSchema domyślnie ustawione na wartość false w programie .NET Framework, począwszy od wersji 4.0. Inne opcje, takie jak Stream, TextReaderi XmlSerializationReader nie mogą wyłączyć przetwarzania DTD.

Opis reguły

Przetwarzanie XML z niezaufanych danych może ładować niebezpieczne odwołania zewnętrzne, które można ograniczyć, używając XmlReader z bezpiecznym resolverem lub wyłączając przetwarzanie DTD. Ta reguła wykrywa kod, który używa XPathDocument klasy i nie przyjmuje XmlReader go jako parametru konstruktora.

Jak naprawić naruszenia

Użyj XPathDocument(XmlReader, *) konstruktorów.

Kiedy pomijać ostrzeżenia

To ostrzeżenie można potencjalnie pominąć, jeśli XPathDocument obiekt jest używany do przetwarzania pliku XML pochodzącego z zaufanego źródła i dlatego nie można go manipulować.

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 CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA5372.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady pseudokodu

Naruszenie

Poniższy przykład pseudo-kodu ilustruje wzorzec wykryty przez tę regułę. Typ pierwszego parametru XPathDocument nie jest XmlReader.

using System.IO;
using System.Xml.XPath;
...
public void TestMethod(Stream stream)
{
    var obj = new XPathDocument(stream);
}

Rozwiązanie

using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
    var obj = new XPathDocument(reader);
}