CA5371: Usar XmlReader para leer el esquema

Propiedad Value
Identificador de la regla CA5371
Título Usar XmlReader para leer el esquema
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

El procesamiento de la entrada XML que no es de confianza con una propiedad XmlSchema.Read de la cual se crean instancias sin un objeto XmlReader puede suponer posibles ataques por denegación de servicio, divulgación de información y falsificación de solicitudes del lado 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 la propiedad ProhibitDtd y ProcessInlineSchema establecida en false de forma predeterminada en .NET Framework a partir de la versión 4.0. 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. El uso de un XmlReader con un solucionador seguro o con el procesamiento de esquemas en línea XML y DTD deshabilitado lo restringe. Esta regla detecta código que usa el método XmlSchema.Read sin XmlReader como parámetro.

Cómo corregir infracciones

Use sobrecargas XmlSchema.Read(XmlReader, *).

Cuándo suprimir las advertencias

Puede suprimir esta advertencia si el método XmlSchema.Read se usa siempre para procesar XML que 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 CA5371
// The code that's violating the rule is on this line.
#pragma warning restore CA5371

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.CA5371.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 XmlSchema.Read no es XmlReader.

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(stream, validationEventHandler);
}

Solución

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(reader, validationEventHandler);
}