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);
}