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 | CA3077 |
| Tytuł | Niezabezpieczone przetwarzanie w projektowaniu interfejsu API, dokumencie XML oraz czytniku plików tekstowych XML |
| Kategoria | Bezpieczeństwo |
| Poprawka jest krytyczna lub niekrytyczna | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Nie. |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Podczas projektowania interfejsu API pochodzącego z xmlDocument i XMLTextReader należy pamiętać o DtdProcessing. Używanie niezabezpieczonych wystąpień DTDProcessing w przypadku odwoływania się do zewnętrznych źródeł jednostki lub ustawiania niezabezpieczonych wartości w kodzie XML może prowadzić do ujawnienia informacji.
Opis reguły
Definicja typu dokumentu (DTD) jest jednym z dwóch sposobów, w jaki analizator XML może określić ważność dokumentu, zgodnie z definicją World Wide Web Consortium (W3C) Extensible Markup Language (XML) 1.0. Ta reguła szuka właściwości i wystąpień, w których akceptowane są niezaufane dane, aby ostrzegać deweloperów przed potencjalnymi zagrożeniami dotyczącymi ujawniania informacji, co może prowadzić do ataków typu "odmowa usługi" (DoS ). Ta reguła jest wyzwalana, gdy:
XmlDocument lub XmlTextReader klasy używają domyślnych wartości resolvera dla przetwarzania DTD.
Żaden konstruktor nie jest zdefiniowany dla klas pochodnych XmlDocument lub XmlTextReader lub nie jest używana żadna bezpieczna wartość dla klasy XmlResolver.
Jak naprawić naruszenia
Przechwytuj i przetwarzaj wszystkie wyjątki XmlTextReader w odpowiedni sposób, aby uniknąć ujawnienia informacji o ścieżce.
Użyj XmlSecureResolverzamiast xmlResolver, aby ograniczyć zasoby, do których może uzyskać dostęp xmlTextReader.
Kiedy pomijać ostrzeżenia
Jeśli nie masz pewności, że dane wejściowe są znane z zaufanego źródła, nie pomijaj reguły z tego ostrzeżenia.
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 CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Przykłady pseudokodu
Naruszenie
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
Rozwiązanie
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}