Partilhar via


CA5372: Usar XmlReader para XPathDocument

Property valor
ID da regra CA5372
Título Usar XmlReader para XPathDocument
Categoria Segurança
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 9 Não

Motivo

Usar a XPathDocument classe instanciada sem um XmlReader objeto pode potencialmente levar a negação de serviço, divulgação de informações e ataques de 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. Apenas com XmlReader é possível desativar o DTD. Processamento de esquema XML embutido como XmlReader tem a ProhibitDtd propriedade e ProcessInlineSchema definida como false por padrão no .NET Framework a partir da versão 4.0. As outras opções, como Stream, TextReadere XmlSerializationReader não podem desativar o processamento DTD.

Descrição da regra

O processamento de XML a partir de dados não confiáveis pode carregar referências externas perigosas, que podem ser restringidas usando um XmlReader com um resolvedor seguro ou com o processamento DTD desativado. Esta regra deteta o código que usa a XPathDocument classe e não usa XmlReader como um parâmetro do construtor.

Como corrigir violações

Use XPathDocument(XmlReader, *) construtores.

Quando suprimir avisos

Você pode potencialmente suprimir esse aviso se o XPathDocument objeto for usado para processar um arquivo XML que vem de uma fonte confiável e, portanto, não pode ser adulterado.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

#pragma warning disable CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

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

Para obter mais informações, consulte 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 detetado por essa regra. O tipo do primeiro parâmetro de XPathDocument não XmlReaderé .

using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);

Solução

using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
var obj = new XPathDocument(reader);
}