다음을 통해 공유


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 예외가 발생합니다.

.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