Clase System.Xml.XmlReaderSettings

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

Use el método Create para obtener instancias de XmlReader. Este método usa la clase XmlReaderSettings para especificar las características que se van a implementar en el objeto XmlReader que crea.

Consulte las secciones de comentarios de las páginas de referencia XmlReader y Create para obtener información sobre la configuración que se debe usar para las comprobaciones de conformidad, la validación y otros escenarios comunes. Consulte el constructor XmlReaderSettings() para obtener una lista de los valores predeterminados.

Consideraciones sobre la seguridad

Tenga en cuenta lo siguiente cuando use la clase XmlReaderSettings.

  • Las marcas de validación ProcessInlineSchema y ProcessSchemaLocation de un objeto XmlReaderSettings no están establecidos de manera predeterminada. Cuando se establecen estas marcas, se utiliza el XmlResolver del objeto XmlReaderSettings para resolver las ubicaciones de esquemas que se encuentra en el documento de la instancia de XmlReader. Si el objeto de XmlResolver es null, las ubicaciones de esquemas no se resuelven aunque se hayan establecido las marcas de validación ProcessInlineSchema y ProcessSchemaLocation.

  • Los esquemas agregados durante la validación agregan nuevos tipos y pueden cambiar el resultado de la validación del documento. Como consecuencia, los esquemas externos solo se deberían resolver desde orígenes de confianza.

  • Los mensajes de error de la validación pueden exponer información confidencial del modelo de contenido. Los mensajes de error y advertencia de la validación se controlan mediante el ValidationEventHandler delegado, o bien se exponen como si fueran XmlSchemaValidationException si no se proporciona ningún controlador de eventos al objeto XmlReaderSettings (las advertencias de la validación no provocan que se produzca una excepción XmlSchemaValidationException). Esta información del modelo de contenido no se debe exponer en escenarios que no sean de confianza. De forma predeterminada los mensajes de advertencia de la validación se suprimen y para que se notifiquen es preciso establecer la marca ReportValidationWarnings.

  • La propiedad SourceUri de XmlSchemaValidationException devuelve la ruta de acceso del identificador URI al archivo de esquema que provocó la excepción. La propiedad SourceUri no se debe exponer en escenarios que no sean de confianza.

  • Se recomienda deshabilitar la marca ProcessIdentityConstraints (que está habilitada de manera predeterminada) al validar documentos XML de gran tamaño que no sean de confianza en situaciones de alta disponibilidad con un esquema que tiene restricciones de identidad en una gran parte del documento.

  • Los objetos XmlReaderSettings pueden contener información confidencial como, por ejemplo, credenciales de usuario. Debería tener cuidado al almacenar en caché objetos XmlReaderSettings o al pasar el objeto XmlReaderSettings de un componente a otro.

  • El procesamiento de DTD está deshabilitado de manera predeterminada. Si habilita el procesamiento de DTD, debe tener en cuenta la inclusión de DTD desde orígenes que no son de confianza y los posibles ataques de denegación de servicio. Use XmlSecureResolver para restringir los recursos a los que XmlReader puede acceder.

  • No admita componentes como, por ejemplo, objetos NameTable, XmlNamespaceManager y XmlResolver, de un origen que no sea de confianza.

  • El uso de la memoria que hace una aplicación que utiliza el XmlReader puede tener una correlación con el tamaño del documento XML analizado. Una forma de provocar un ataque de denegación de servicio es enviando documentos XML excesivamente grandes para ser analizados. Para limitar el tamaño del documento que se puede analizar, establezca la propiedad MaxCharactersInDocument y limite el número de caracteres resultantes de la expansión de entidades, para lo que debe establecer la propiedad MaxCharactersFromEntities.