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 | CA5370 |
| Tytuł | Używaj XmlReader do weryfikacji kontrolera |
| 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
Weryfikowanie niezaufanych danych wejściowych XML za pomocą instancji klasy XmlValidatingReader utworzonej bez obiektu XmlReader może potencjalnie prowadzić do ataku odmowy usługi, ujawnienia informacji i podrabiania żą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 z XmlReader można wyłączyć DTD. Wbudowane przetwarzanie schematu XML, takie jak XmlReader, ma właściwości ProhibitDtd i ProcessInlineSchema, ustawione domyślnie na 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 poprzez zastosowanie modułu XmlReader z bezpiecznym resolverem lub poprzez wyłączenie przetwarzania schematów inline 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ściamiProhibitDtdiProcessInlineSchemaustawionymi nafalse. - Począwszy od programu .NET Framework 2.0,
XmlValidatingReaderjest 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 pseudokodu
Naruszenie
Poniższy przykład pseudo-kodu ilustruje wzorzec wykryty przez tę regułę.
Typ pierwszego parametru XmlValidatingReader.XmlValidatingReader() nie jest XmlReader.
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);
}