Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Propriedade | valor |
|---|---|
| ID da regra | CA5369 |
| Título | Usar XmlReader para Desserializar |
| Categoria | Segurança |
| A correção causa interrupção ou não | Ininterrupto |
| Habilitado por padrão no .NET 10 | Não |
| Línguas aplicáveis | C# e Visual Basic |
Motivo
Desserializar entradas XML não confiáveis com XmlSerializer.Deserialize 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 integrado, tendo as propriedades ProhibitDtd e ProcessInlineSchema definidas como false por padrão no .NET Framework versão 4.0 e posteriores. As outras opções, como Stream, TextReadere 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, que devem ser restritas usando um XmlReader com um resolvedor seguro ou com o processamento de esquema embutido DTD e XML desabilitado. Esta regra deteta o código que usa o XmlSerializer.Deserialize método e não toma XmlReader como um parâmetro do construtor.
Como corrigir violações
Não utilize sobrecargas diferentes de Deserialize(XmlReader), Deserialize(XmlReader, String), Deserialize(XmlReader, XmlDeserializationEvents), ou Deserialize(XmlReader, String, XmlDeserializationEvents).
Quando suprimir avisos
Você pode potencialmente suprimir esse aviso se o XML analisado vier de uma fonte confiável e, portanto, não puder 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 CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5369.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 XmlSerializer.Deserialize não é XmlReader ou uma classe derivada dela.
using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));
Solução
using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));