CA5371: Usar o XmlReader para a leitura do esquema

Property Valor
ID da regra CA5371
Título Usar o XmlReader para a leitura do esquema
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

O processamento de entrada XML não confiável com XmlSchema.Read instanciado sem um objeto XmlReader poderá resultar em ataques de negação de serviço, divulgação de informações e falsificação de solicitação do lado do servidor. Esses ataques são habilitados por DTD não confiável e processamento de esquema XML, o que permite a inclusão de bombas XML e entidades externas mal-intencionadas no XML. Somente com XmlReader é possível desabilitar o DTD. O processamento do esquema XML embutido como XmlReader tem as propriedades ProhibitDtd e ProcessInlineSchema definidas como falso por padrão no .NET Framework da versão 4.0 em diante. As outras opções, como Stream, TextReader e XmlSerializationReader não podem desabilitar o processamento de DTD.

Descrição da regra

O processamento de esquemas DTD e XML não confiáveis pode permitir o carregamento de referências externas perigosas. Usar um XmlReader com um resolvedor seguro ou com DTD e processamento de esquema em linha XML desabilitado aplicará a restrição. Essa regra detectará o código que usar o método XmlSchema.Read sem um parâmetro XmlReader.

Como corrigir violações

Use XmlSchema.Read(XmlReader, *) sobrecargas.

Quando suprimir avisos

Você poderá suprimir esse aviso se o método XmlSchema.Read sempre for usado para processar o XML proveniente de uma fonte confiável e, portanto, não poderá ser adulterado.

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

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.CA5371.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.

Exemplos de pseudocódigo

Violação

O exemplo de pseudocódigo a seguir ilustra o padrão detectado por essa regra. O tipo do primeiro parâmetro de XmlSchema.Read não éXmlReader.

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(stream, validationEventHandler);
}

Solução

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(reader, validationEventHandler);
}