다음을 통해 공유


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