Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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);
}