XmlSecureResolver는 사용되지 않음

메서드 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이 throw됩니다.

.NET Core 3.1 및 .NET 6에서 XmlSecureResolver.GetEntity(Uri, String, Type)는 외부 XML 리소스 확인을 전혀 제한하지 않습니다. 외부 리소스 확인은 제한 없이 계속 진행할 수 있습니다.

새 동작

.NET 7부터 XmlSecureResolver.GetEntity(Uri, String, Type)는 무조건 XmlException을 throw합니다. CAS 샌드박스를 생성하지 않으며 외부 리소스를 확인하려고 시도하지 않습니다.

도입된 버전

.NET 7

호환성이 손상되는 변경의 형식

이 변경 내용은 원본 호환성이진 호환성에 영향을 줄 수 있습니다.

변경 이유

이 변경으로 .NET 에코시스템의 보안이 향상됩니다. 이러한 사용 중단 시 XmlSecureResolver 동작은 .NET 7 또는 이후 버전에서 실행할 때 장애 위험(항상 해결 수행)에서 장애 조치(절대 해결 수행 안 함)로 이동합니다.

대신 새로 도입한 정적 속성 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