Udostępnij za pośrednictwem


CA5366: Użyj XmlReader do odczytu XML dla DataSet

Właściwości Wartość
Identyfikator reguły CA5366
Tytuł Użyj XmlReader do odczytu XML do DataSet.
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

Definicja typu dokumentu (DTD) definiuje strukturę oraz elementy prawne i atrybuty dokumentu XML. Odwołanie do DTD z zewnętrznego zasobu może spowodować potencjalne ataki typu "odmowa usługi" (DoS). Większość czytelników nie może wyłączyć przetwarzania DTD i ograniczyć ładowanie odwołań zewnętrznych z wyjątkiem System.Xml.XmlReader. Korzystanie z tych innych czytników do załadowania XML jedną z następujących metod powoduje wyzwolenie tej reguły.

Opis reguły

Użycie elementu System.Data.DataSet do odczytu kodu XML z niezaufanymi danymi może ładować niebezpieczne odwołania zewnętrzne, które powinny być ograniczone za pomocą modułu XmlReader z bezpiecznym rozpoznawaniem lub z wyłączonym przetwarzaniem DTD.

Jak naprawić naruszenia

Użyj XmlReader lub jej klas pochodnych, aby odczytać kod XML.

Kiedy pomijać ostrzeżenia

Pomiń ostrzeżenie z tej reguły podczas pracy z zaufanym źródłem danych.

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 CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA5366.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady pseudokodu

Naruszenie

using System.Data;
using System.IO;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new FileStream("xmlFilename", FileMode.Open));
    }
}

Rozwiązanie

using System.Data;
using System.IO;
using System.Xml;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new XmlTextReader(new FileStream("xmlFilename", FileMode.Open)));
    }
}