다음을 통해 공유


XSLT 보안 고려 사항

XSLT 언어에는 강력하며 유연성 있는 풍부한 기능이 있습니다. 이러한 기능은 유용하지만 외부 소스에서 악용할 수도 있습니다. XSLT를 안전하게 사용하려면 XSLT를 사용할 때 발생하는 보안 문제 유형을 이해하고 이러한 위험 요소를 완화하기 위한 기본적인 전략을 알아야 합니다.

XSLT 확장

가장 많이 사용되는 두 가지 XSLT 확장은 스타일시트 스크립팅과 확장 개체입니다. 이러한 확장을 사용하면 XSLT 프로세서에서 코드를 실행할 수 있습니다.

  • 확장명 개체는 프로그래밍 기능을 XSLT(XSL Transformations)에 추가합니다.

  • msxsl:script 확장 요소를 사용하여 스타일시트에 스크립트를 포함할 수 있습니다.

확장명 개체

AddExtensionObject 메서드를 사용하여 확장명 개체를 추가합니다. 확장명 개체를 지원하려면 FullTrust 권한 집합이 필요합니다. 이 권한 집합은 확장명 개체 코드를 실행할 때 권한 높이기가 일어나지 않도록 합니다. FullTrust 권한 없이 AddExtensionObject 메서드를 호출하려고 시도하면 보안 예외가 throw됩니다.

스타일시트 스크립트

msxsl:script 확장 요소를 사용하여 스타일시트에 스크립트를 포함할 수 있습니다. 스크립트 지원은 XslCompiledTransform 클래스의 선택적 기능으로 기본적으로 비활성화되어 있습니다. 스크립트를 활성화하려면 XsltSettings.EnableScript 속성을 true로 설정하고 XsltSettings 개체를 Load 메서드에 전달합니다.

참고 항목

스크립트 블록은 .NET Framework에서만 지원됩니다. .NET Core 또는 .NET 5.이상에서는 지원되지 않습니다.

지침

신뢰할 수 있는 소스에서 스타일시트를 가져온 경우에만 스크립팅을 활성화합니다. 스타일시트의 소스를 확인할 수 없는 경우 또는 신뢰할 수 있는 소스에서 스타일시트를 가져오지 않은 경우 XSLT 설정 인수에 대해 null을 전달합니다.

외부 리소스

XSLT 언어에는 프로세서가 URI 참조를 확인해야 하는 xsl:import, xsl:include, document() 함수 등의 기능이 있습니다. XmlResolver 클래스를 사용하여 외부 리소스를 확인할 수 있습니다. 다음 두 가지 경우에 외부 리소스를 확인해야 할 수 있습니다.

  • 스타일시트를 컴파일할 때 XmlResolverxsl:import 확인에 xsl:include가 사용되는 경우

  • 변환을 실행할 때 XmlResolver를 사용하여 document() 함수를 확인하는 경우

    참고 항목

    document() 클래스에서 XslCompiledTransform 함수는 기본적으로 비활성화되어 있습니다. 이 기능을 활성화하려면 XsltSettings.EnableDocumentFunction 속성을 true로 설정하고 XsltSettings 개체를 Load 메서드에 전달합니다.

LoadTransform 메서드는 각각 인수의 하나로 XmlResolver를 사용하는 오버로드를 포함합니다. XmlResolver가 지정되지 않을 경우 기본 XmlUrlResolver가 자격 증명 없이 사용됩니다.

지침

신뢰할 수 있는 소스에서 스타일시트를 가져온 경우에만 document() 함수를 활성화합니다.

다음 목록에서는 XmlResolver 개체를 지정하려 할 수 있는 경우에 대해 설명합니다.

  • XSLT 처리에 인증을 요구하는 네트워크 리소스에 대한 액세스 권한이 필요할 경우 XmlResolver를 필요한 자격 증명과 함께 사용할 수 있습니다.

  • XSLT 처리가 액세스할 수 있는 리소스를 제한하려면 XmlSecureResolver를 올바른 권한 집합으로 사용할 수 있습니다. 제어하지 못하거나 신뢰할 수 없는 리소스를 열어야 하는 경우 XmlSecureResolver 클래스를 사용합니다.

  • 동작을 사용자 지정하기 위해 사용자의 고유한 XmlResolver 클래스를 구현하고 사용하여 리소스를 확인할 수 있습니다.

  • 외부 리소스에 액세스하지 않도록 하려면 null 인수에 대해 XmlResolver을 지정할 수 있습니다.

참고 항목