Dela via


XmlSecureResolver är föråldrad

Metoden System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) genererar villkorslöst en XmlException vid körning. Om programmet använder XmlSecureResolver och du försöker lösa en XML-resurs via den misslyckas lösningen med ett undantag.

Dessutom är hela System.Xml.XmlSecureResolver typen föråldrad. Alla referenser till den här typen resulterar i en SYSLIB0047 varning vid bygget. Om du har aktiverat varningar som fel orsakar detta en byggpaus om programmet refererar till 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);

Tidigare beteende

I .NET Framework XmlSecureResolver.GetEntity(Uri, String, Type) skapar en CAS-sandbox (Code Access Security) för att begränsa den externa XML-resursmatchningsprocessen. Om principen överträds utlöses en SecurityException .

I .NET Core 3.1 och .NET 6 XmlSecureResolver.GetEntity(Uri, String, Type) begränsar inte den externa XML-resursmatchningen alls. Extern resursmatchning tillåts fortsätta utan begränsningar.

Nytt beteende

Från och med .NET 7 XmlSecureResolver.GetEntity(Uri, String, Type) genererar villkorslöst en XmlException. Den konstruerar inte en CAS-sandbox-miljö och försöker inte lösa den externa resursen.

Version introducerad

.NET 7

Typ av icke-bakåtkompatibel ändring

Den här ändringen kan påverka källkompatibilitet och binär kompatibilitet.

Orsak till ändringen

Den här ändringen förbättrar säkerheten för .NET-ekosystemet. Den här obsoletionen flyttar beteendet XmlSecureResolver från felfarlig (utför alltid upplösning) till felsäker (utför aldrig upplösning) när den körs på .NET 7 eller senare.

Överväg i stället att använda den nyligen introducerade statiska egenskapen XmlResolver.ThrowingResolver. Den här egenskapen tillhandahåller en XmlResolver instans som förbjuder extern resursmatchning.

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;

Berörda API:er