CA5366: Użyj elementu XmlReader dla elementu DataSet Read XML
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA5366 |
Tytuł | Użyj czytnika XmlReader na potrzeby pliku XML odczytu zestawu danych |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Definicja typu dokumentu (DTD) definiuje strukturę oraz elementy prawne i atrybuty dokumentu XML. Odwołanie do dtD z zasobu zewnętrznego 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. Za pomocą tych innych czytników można załadować kod XML za pomocą jednej z następujących metod wyzwala tę regułę:
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 przykładów kodu przykładowego
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)));
}
}