CA5366: Usar XmlReader para XML da leitura do conjunto de dados
Property | Valor |
---|---|
ID da regra | CA5366 |
Título | Usar XmlReader para XML da leitura do conjunto de dados |
Categoria | Segurança |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Não |
Causa
Uma DTD (Definição de Tipo de Documento) define a estrutura e os elementos e atributos legais de um documento XML. Fazer referência a um DTD de um recurso externo pode causar possíveis ataques de DoS (Negação de Serviço). A maioria dos leitores não pode desabilitar o processamento de DTD e restringir o carregamento de referências externas, exceto para System.Xml.XmlReader. Usar esses outros leitores para carregar XML por um dos seguintes métodos dispara esta regra:
Descrição da regra
O uso de System.Data.DataSet para ler XML contendo dados não confiáveis pode carregar referências externas perigosas, que devem ser restringidas usando um XmlReader com um resolvedor seguro ou com o processamento de DTD desabilitado.
Como corrigir violações
Use XmlReader ou suas classes derivadas para ler XML.
Quando suprimir avisos
Suprime um aviso dessa regra ao lidar com uma fonte de dados confiável.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5366.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação
using System.Data;
using System.IO;
public class ExampleClass
{
public void ExampleMethod()
{
new DataSet().ReadXml(new FileStream("xmlFilename", FileMode.Open));
}
}
Solução
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)));
}
}