Udostępnij za pośrednictwem


Użyj XmlReader do odczytu schematu

Właściwości Wartość
Identyfikator reguły CA5371
Tytuł Używaj XmlReader do czytania schematu
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

Przetwarzanie niezaufanych danych wejściowych XmlSchema.Read XML bez zainstancjowanego obiektu XmlReader może potencjalnie prowadzić do odmowy usługi, ujawnienia informacji i fałszowania zapytań 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 niezaufanych schematów DTD i XML może umożliwić ładowanie niebezpiecznych odwołań zewnętrznych. Użycie XmlReader z bezpiecznym narzędziem rozpoznawania lub przy wyłączonym przetwarzaniu wbudowanego schematu DTD i XML ogranicza to. Ta reguła wykrywa kod, który używa XmlSchema.Read metody bez XmlReader jako parametru.

Jak naprawić naruszenia

Użyj XmlSchema.Read(XmlReader, *) przeciążeń.

Kiedy pomijać ostrzeżenia

Można potencjalnie pominąć to ostrzeżenie, jeśli metoda XmlSchema.Read jest zawsze używana do przetwarzania XML pochodzącego z zaufanego źródła i dlatego nie można w niego ingerować.

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

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

[*.{cs,vb}]
dotnet_diagnostic.CA5371.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 XmlSchema.Read nie jest XmlReader.

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(stream, validationEventHandler);
}

Rozwiązanie

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(reader, validationEventHandler);
}