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
.NET