Udostępnij za pośrednictwem


CA5372: Użyj elementu XmlReader dla elementu XPathDocument

Właściwości Wartość
Identyfikator reguły CA5372
Tytuł Używaj elementu XmlReader dla elementu XPathDocument
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

XPathDocument Utworzenie wystąpienia klasy bez XmlReader obiektu może potencjalnie prowadzić do odmowy usługi, ujawnienia informacji i ataków fałszerzowanych żą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 w przypadku XmlReader , gdy można wyłączyć usługę DTD. Wbudowane przetwarzanie schematu XML ma XmlReader ProhibitDtd właściwość i ProcessInlineSchema ustawioną na wartość false domyślnie 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 kodu XML z niezaufanych danych może ładować niebezpieczne odwołania zewnętrzne, które mogą być ograniczone przy użyciu modułu XmlReader z bezpiecznym rozpoznawaniem lub z wyłączonym przetwarzaniem 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 przykładów kodu przykładowego

Naruszenie

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

using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);

Rozwiązanie

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