Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
| Propiedad | Value |
|---|---|
| Identificador de la regla | CA5372 |
| Título | Usar XmlReader para XPathDocument |
| Categoría | Seguridad |
| La corrección interrumpe o no interrumpe | Poco problemático |
| Habilitado de forma predeterminada en .NET 10 | No |
Causa
El uso de la clase XPathDocument 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 XML a partir de datos que no son de confianza puede cargar referencias externas peligrosas, que se pueden restringir mediante un XmlReader con un solucionador seguro o con el procesamiento de DTD deshabilitado. Esta regla detecta código que usa la clase XPathDocument y no adopta XmlReader como parámetro de constructor.
Cómo corregir infracciones
Use constructores XPathDocument(XmlReader, *).
Cuándo suprimir las advertencias
Puede suprimir esta advertencia si el objeto XPathDocument se usa para procesar un archivo 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 CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372
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.CA5372.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 XPathDocument no es XmlReader.
using System.IO;
using System.Xml.XPath;
...
public void TestMethod(Stream stream)
{
var obj = new XPathDocument(stream);
}
Solución
using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
var obj = new XPathDocument(reader);
}