Sdílet prostřednictvím


XmlSecureResolver je zastaralý

Metoda System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) bezpodmínečně vyvolá XmlException za běhu. Pokud vaše aplikace využívá XmlSecureResolver prostředek XML a pokusíte se ho vyřešit, řešení selže s výjimkou.

Kromě toho je celý System.Xml.XmlSecureResolver typ zastaralý. Všechny odkazy na tento typ budou mít za následek upozornění SYSLIB0047 v době sestavení. Pokud jste upozornění povolili jako chyby, způsobí to přerušení sestavení, pokud vaše aplikace odkazuje 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 run time.
object entity = resolver.GetEntity(
    absoluteUri: new Uri("https://www.example.com/some-entity"),
    role: null,
    ofObjectToReturn: null);

Předchozí chování

V rozhraní .NET Framework XmlSecureResolver.GetEntity(Uri, String, Type) vytvoří sandbox CAS (Code Access Security), který omezí proces překladu externích prostředků XML. Pokud dojde k porušení zásad, SecurityException vyvolá se výjimka.

V .NET Core 3.1 a .NET 6 XmlSecureResolver.GetEntity(Uri, String, Type) vůbec neomezuje překlad externích prostředků XML. Překlad externích prostředků může pokračovat bez omezení.

Nové chování

Počínaje rozhraním .NET 7 XmlSecureResolver.GetEntity(Uri, String, Type) bezpodmínečně vyvolá výjimku XmlException. Nekonstruuje sandbox CAS a nepokouší se přeložit externí prostředek.

Zavedená verze

.NET 7

Typ zásadní změny

Tato změna může ovlivnit kompatibilitu zdroje a binární kompatibilitu.

Důvod změny

Tato změna zlepšuje zabezpečení ekosystému .NET. Tato obsoletion přesouvá chování XmlSecureResolver z chybově nebezpečné (vždy provádět řešení) na selhání -bezpečné (nikdy neprovádějte řešení) při spuštění na .NET 7 nebo novější.

Zvažte místo toho použití nově zavedené statické vlastnosti XmlResolver.ThrowingResolver. Tato vlastnost poskytuje XmlResolver instanci, která zakáže překlad externích prostředků.

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;

Ovlivněná rozhraní API