CA5370: Użyj elementu XmlReader do sprawdzania poprawności czytnika

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

Przyczyna

Weryfikowanie niezaufanych danych wejściowych XML za pomocą klasy utworzonej XmlValidatingReaderXmlReader bez obiektu może potencjalnie prowadzić do odmowy usługi, ujawnienia informacji i fałszerzowania żądania 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ą domyślnie false w programie .NET Framework, począwszy od wersji 4.0.

Opis reguły

Przetwarzanie niezaufanych schematów DTD i XML może umożliwić ładowanie niebezpiecznych odwołań zewnętrznych. To niebezpieczne ładowanie może być ograniczone przy użyciu modułu XmlReader z bezpiecznym rozpoznawaniem nazw lub z wyłączonym przetwarzaniem schematu wbudowanego DTD i XML. Ta reguła wykrywa kod, który używa XmlValidatingReader klasy bez XmlReader jako parametru konstruktora.

Jak naprawić naruszenia

  • Użyj polecenia XmlValidatingReader(XmlReader) z właściwościami ProhibitDtd i ProcessInlineSchema ustawionymi na false.
  • Począwszy od programu .NET Framework 2.0, XmlValidatingReader jest uważany za przestarzały. Możesz utworzyć wystąpienie czytnika sprawdzania poprawności za pomocą polecenia XmlReader.Create.

Kiedy pomijać ostrzeżenia

To ostrzeżenie można potencjalnie pominąć, jeśli XmlValidatingReader element jest zawsze używany do sprawdzania poprawności kodu XML pochodzącego z zaufanego źródła i dlatego nie można go 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 CA5370
// The code that's violating the rule is on this line.
#pragma warning restore CA5370

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

[*.{cs,vb}]
dotnet_diagnostic.CA5370.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 XmlValidatingReader.XmlValidatingReader() nie XmlReaderjest .

using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
    var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}

Rozwiązanie

using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
    var obj = new XmlValidatingReader(xmlReader);
}