Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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 elementu XmlReader do odczytywania schematu |
| Kategoria | Bezpieczeństwo |
| Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | 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);
}