Udostępnij za pośrednictwem


CA5371: Odczyt schematu przy użyciu elementu XmlReader

Właściwości Wartość
Identyfikator reguły CA5371
Stanowisko Używaj elementu XmlReader do odczytywania schematu
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Przetwarzanie niezaufanych danych wejściowych XmlSchema.Read XML z wystąpieniem XmlReader bez 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 XmlReaderProhibitDtd 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 niezaufanych schematów DTD i XML może umożliwić ładowanie niebezpiecznych odwołań zewnętrznych. XmlReader Użycie elementu z bezpiecznym narzędziem rozpoznawania lub z wyłączonym przetwarzaniem schematu wbudowanego 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

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

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 przykładów kodu przykładowego

Naruszenie

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

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);
}