Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA5369 |
| Título | Usar XmlReader para deserializar |
| Categoría | Seguridad |
| El arreglo es problemático o no problemático | Sin interrupción |
| Habilitado de forma predeterminada en .NET 10 | No |
| Idiomas aplicables | C# y Visual Basic |
Causa
La deserialización de una entrada XML no confiable con XmlSerializer.Deserialize instanciado sin un objeto XmlReader puede llevar a ataques por denegación de servicio, divulgación de información y falsificación de solicitudes del lado del servidor. Estos ataques están habilitados por el procesamiento de esquemas XML y DTD que no son de confianza, lo cual permite la inclusión de bombas XML y entidades externas malintencionadas en el XML. Solo con XmlReader es posible deshabilitar DTD. El procesamiento de esquemas XML en línea como XmlReader tiene las propiedades ProhibitDtd y ProcessInlineSchema establecidas en false de forma predeterminada en la versión 4.0 de .NET Framework y posteriores. Las demás opciones, como Stream, TextReader y XmlSerializationReader no pueden deshabilitar el procesamiento de DTD.
Descripción de la regla
El procesamiento de esquemas XML y DTD que no son de confianza puede habilitar la carga de referencias externas peligrosas, que se deben restringir mediante un XmlReader con un solucionador seguro o con el procesamiento de esquemas en línea XML y DTD deshabilitado. Esta regla detecta código que usa el método XmlSerializer.Deserialize y no adopta XmlReader como parámetro de constructor.
Cómo corregir infracciones
No utilice sobrecargas XmlSerializer.Deserialize distintas de Deserialize(XmlReader), Deserialize(XmlReader, String), Deserialize(XmlReader, XmlDeserializationEvents) o Deserialize(XmlReader, String, XmlDeserializationEvents).
Cuándo suprimir las advertencias
Puede suprimir esta advertencia si el XML analizado proviene de un origen de confianza y, por lo tanto, no se puede alterar.
Supresión de una advertencia
Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.
#pragma warning disable CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.CA5369.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.
Ejemplos de pseudocódigo
Infracción
El pseudocódigo de ejemplo siguiente muestra el patrón que detecta esta regla.
El tipo del primer parámetro de XmlSerializer.Deserialize no es XmlReader o una clase derivada de él.
using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));
Solución
using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));