CA5372: Usar o XmlReader para o XPathDocument
Property | Valor |
---|---|
ID da regra | CA5372 |
Título | Usar o XmlReader para o XPathDocument |
Categoria | Segurança |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Não |
Causa
Usar a classe XPathDocument
instanciada sem um objeto XmlReader
pode levar a 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 XML de dados não confiáveis pode carregar referências externas perigosas, que devem ser restringidas usando um XmlReader
com um resolvedor seguro ou o processamento de DTD desabilitado. Essa regra detecta o código que usa a classe XPathDocument
não usa XmlReader
como um parâmetro de construtor.
Como corrigir violações
Use construtores XPathDocument(XmlReader, *)
.
Quando suprimir avisos
Você poderá suprimir esse aviso se o objeto XPathDocument
for usado para processar um arquivo XML proveniente de uma fonte confiável e, portanto, não puder 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 CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372
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.CA5372.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 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);
}