Comparteix a través de


CA5370: Usar XmlReader para validar el lector

Propiedad Valor
Identificador de la regla CA5370
Título Usar XmlReader para validar el lector
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 validación de la entrada XML que no es de confianza con la clase XmlValidatingReader instanciada sin un objeto XmlReader puede llevar a una posible denegación de servicio, divulgación de información y falsificación de solicitudes en el 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 .NET Framework a partir de la versión 4.0.

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. Esta carga peligrosa se puede restringir mediante el uso de 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 la clase XmlValidatingReader sin XmlReader como parámetro de constructor.

Cómo corregir infracciones

  • Use XmlValidatingReader(XmlReader) con las propiedades ProhibitDtd y ProcessInlineSchema establecidas en false.
  • A partir de .NET Framework 2.0, XmlValidatingReader se considera obsoleto. Puede crear instancias de un lector de validación con XmlReader.Create.

Cuándo suprimir las advertencias

Puede suprimir esta advertencia si XmlValidatingReader se usa siempre para validar 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 CA5370
// The code that's violating the rule is on this line.
#pragma warning restore CA5370

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.CA5370.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 XmlValidatingReader.XmlValidatingReader() no es XmlReader.

using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
    var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}

Solución

using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
    var obj = new XmlValidatingReader(xmlReader);
}