Compartir a través de


XmlSecureResolver está obsoleto

El método System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) lanza incondicionalmente una excepción de tipo XmlException en tiempo de ejecución. Si su aplicación utiliza XmlSecureResolver e intenta resolver un recurso XML a través de él, se producirá un error en la resolución con una excepción.

Además, la totalidad del tipo System.Xml.XmlSecureResolver está obsoleta. Todas las referencias a este tipo producirán una advertencia SYSLIB0047 en tiempo de compilación. Si ha habilitado advertencias como errores, esto provocará una interrupción de compilación si la aplicación hace referencia a XmlSecureResolver.

using System.Xml;

// Compiler warning SYSLIB0047: XmlSecureResolver type is obsolete.
XmlResolver resolver = new XmlSecureResolver(
    resolver: new XmlUrlResolver(),
    securityUrl: "https://www.example.com/");

// Call to XmlSecureResolver.GetEntity below throws XmlException at runtime.
object entity = resolver.GetEntity(
    absoluteUri: new Uri("https://www.example.com/some-entity"),
    role: null,
    ofObjectToReturn: null);

Comportamiento anterior

En .NET Framework, XmlSecureResolver.GetEntity(Uri, String, Type) crea un espacio aislado de seguridad de acceso a código (CAS) para restringir el proceso de resolución de recursos XML externo. Si se infringe la directiva, se produce una excepción SecurityException.

En .NET Core 3.1 y .NET 6, XmlSecureResolver.GetEntity(Uri, String, Type) no restringe la resolución de recursos XML externos. La resolución de recursos externos puede continuar sin limitaciones.

Nuevo comportamiento

A partir de .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) lanza incondicionalmente un XmlException. No construye un espacio aislado CAS y no intenta resolver el recurso externo.

Versión introducida

.NET 7

Tipo de cambio disruptivo

Este cambio puede afectar a la compatibilidad de origen y la compatibilidad binaria.

Motivo del cambio

Este cambio mejora la seguridad del ecosistema de .NET. Esta obsolescencia cambia el comportamiento de XmlSecureResolver de un error peligroso (siempre realiza una resolución) a una resolución con error (nunca realiza la resolución) cuando se ejecuta en .NET 7 o una versión posterior.

Considere la posibilidad de usar en su lugar la propiedad XmlResolver.ThrowingResolverestática recién introducida . Esta propiedad proporciona una XmlResolver instancia que prohíbe la resolución de recursos externos.

using System.Xml;

// BAD: Do not use XmlSecureResolver.
// XmlResolver resolver = new XmlSecureResolver(
//     resolver: new XmlUrlResolver(),
//     securityUrl: "https://www.example.com/");

// GOOD: Use XmlResolver.ThrowingResolver instead.
XmlResolver resolver = XmlResolver.ThrowingResolver;

Las APIs afectadas