다음을 통해 공유


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