Partager via


XmlSecureResolver est obsolète

La méthode System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) lève inconditionnellement un XmlException au moment de l’exécution. Si votre application utilise XmlSecureResolver et que vous tentez de résoudre une ressource XML par le biais de celle-ci, la résolution échoue avec une exception.

En outre, l’intégralité System.Xml.XmlSecureResolver du type est obsolète. Toutes les références à ce type entraînent un avertissement SYSLIB0047 au moment de la compilation. Si vous avez activé les avertissements en tant qu’erreurs, cela entraîne un arrêt de génération si votre application fait référence à 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);

Comportement précédent

Dans le .NET Framework, XmlSecureResolver.GetEntity(Uri, String, Type) construit une sandbox de sécurité d'accès au code (CAS) pour limiter le processus de résolution des ressources XML externes. Si la stratégie est violée, une SecurityException est levée.

Dans .NET Core 3.1 et .NET 6, XmlSecureResolver.GetEntity(Uri, String, Type) ne limite pas du tout la résolution des ressources XML externes. La résolution des ressources externes est autorisée sans aucune limitation.

Nouveau comportement

À partir de .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) lève inconditionnellement une XmlException. Il ne construit pas de bac à sable CAS et ne tente pas de résoudre la ressource externe.

Version introduite

.NET 7

Type de changement cassant

Cette modification peut affecter la compatibilité des sources et la compatibilité binaire.

Raison de la modification

Cette modification améliore la sécurité de l’écosystème .NET. Cette obsolescence change le comportement de XmlSecureResolver de fail-dangerous (toujours effectuer la résolution) à fail-safe (ne jamais effectuer de résolution) lors de l’exécution sur .NET 7 ou version ultérieure.

Envisagez plutôt d’utiliser la propriété XmlResolver.ThrowingResolverstatique nouvellement introduite. Cette propriété fournit une XmlResolver instance qui interdit la résolution de ressources externes.

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;

API affectées