XmlSecureResolver は廃止されました

メソッド System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) から、実行時に無条件で XmlException がスローされます。 アプリケーションに XmlSecureResolver を利用していて、それを介して XML リソースを解決しようとすると、例外が発生して解決に失敗します。

さらに、System.Xml.XmlSecureResolver 型全体が廃止されました。 この型を参照すると、常にビルド時に SYSLIB0047 警告が発生します。 アプリケーションから 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);

以前の動作

.NET Framework では、XmlSecureResolver.GetEntity(Uri, String, Type) により、外部 XML リソース解決プロセスを制限するコード アクセス セキュリティ (CAS) サンドボックスが構築されます。 ポリシーに違反した場合は SecurityException がスローされます。

.NET Core 3.1 と .NET 6 では、XmlSecureResolver.GetEntity(Uri, String, Type) によって外部 XML リソース解決をまったく制限されません。 外部リソース解決は制限なしで続行できます。

新しい動作

.NET 7 以降、XmlSecureResolver.GetEntity(Uri, String, Type) からは無条件に XmlException がスローされます。 CAS サンドボックスは構築されず、外部リソースの解決も試行されません。

導入されたバージョン

.NET 7

破壊的変更の種類

この変更は、ソースの互換性バイナリの互換性に影響する可能性があります。

変更理由

この変更により、.NET エコシステムのセキュリティが向上します。 この廃止の結果、.NET 7 以降で実行する場合、XmlSecureResolver の動作はフェールデンジャラス (常に解決を実行する) からフェールセーフ (決して解決を実行しない) に変わります。

代わりに新しく導入された静的プロパティ XmlResolver.ThrowingResolver を使うことを検討してください。 このプロパティには、外部リソース解決を禁止する XmlResolver インスタンスが用意されています。

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