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 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
, TextReader
i 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 XmlReader
jest .
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);
}