CA5371: Usar XmlReader para leitura de esquema
Propriedade | valor |
---|---|
ID da regra | CA5371 |
Cargo | Usar XmlReader para leitura de esquema |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
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 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
, TextReader
e XmlSerializationReader
não podem desativar o processamento 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. O uso de um com um resolvedor seguro ou com o processamento de XmlReader
esquema embutido DTD e XML desabilitado restringe isso. Esta regra deteta o código que usa o XmlSchema.Read método sem XmlReader
como parâmetro.
Como corrigir violações
Use XmlSchema.Read(XmlReader, *)
sobrecargas.
Quando suprimir avisos
Você pode potencialmente suprimir esse aviso se o XmlSchema.Read método for sempre usado para processar 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 CA5371
// The code that's violating the rule is on this line.
#pragma warning restore CA5371
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5371.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 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);
}