Udostępnij za pośrednictwem


CA3077: Niezabezpieczone przetwarzanie w projektowaniu interfejsu API, dokumencie XML i czytniku tekstu XML

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;
        }
    }
}