Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il metodo System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) genera in modo incondizionato un oggetto XmlException in fase di esecuzione. Se l'applicazione usa XmlSecureResolver e si tenta di risolvere una risorsa XML tramite essa, la risoluzione avrà esito negativo con un'eccezione.
Inoltre, l'intero System.Xml.XmlSecureResolver tipo è obsoleto. Tutti i riferimenti a questo tipo genereranno un avviso SYSLIB0047 in fase di compilazione. Se hai abilitato gli avvisi come errori, questo causerà un'interruzione della compilazione se l'applicazione fa riferimento 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);
Comportamento precedente
In .NET Framework, XmlSecureResolver.GetEntity(Uri, String, Type) costruisce una sandbox CAS (Code Access Security) per limitare il processo di risoluzione delle risorse XML esterne. Se i criteri vengono violati, viene generata un'eccezione SecurityException .
In .NET Core 3.1 e .NET 6 XmlSecureResolver.GetEntity(Uri, String, Type) non limita affatto la risoluzione delle risorse XML esterne. La risoluzione delle risorse esterne può procedere senza limitazioni.
Nuovo comportamento
A partire da .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) genera in modo incondizionato un'eccezione XmlException. Non costruisce una sandbox CAS e non tenta di risolvere la risorsa esterna.
Versione introdotta
.NET 7
Tipo di cambiamento che interrompe la compatibilità
Questa modifica può influire sulla compatibilità dell'origine e sulla compatibilità binaria.
Motivo della modifica
Questa modifica migliora la sicurezza dell'ecosistema .NET. Questa obsolescenza sposta il comportamento di XmlSecureResolver da pericoloso in caso di errore (esegue sempre la risoluzione) a sicuro in caso di errore (non esegue mai la risoluzione) quando viene eseguito su .NET 7 o versioni successive.
Azione consigliata
Prendere invece in considerazione l'uso della proprietà XmlResolver.ThrowingResolverstatica appena introdotta. Questa proprietà fornisce un'istanza XmlResolver che impedisce la risoluzione delle risorse esterne.
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;