메서드 System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) 는 무조건 런타임에 XmlException throw합니다. 애플리케이션이 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) 에서 CAS(코드 액세스 보안) 샌드박스를 생성하여 외부 XML 리소스 확인 프로세스를 제한합니다. 정책을 위반하면 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