XSLT 언어에는 뛰어난 성능과 유연성을 제공하는 다양한 기능 집합이 있습니다. 여기에는 유용하지만 외부 원본에서 악용될 수 있는 많은 기능이 포함되어 있습니다. XSLT를 안전하게 사용하려면 XSLT를 사용할 때 발생하는 보안 문제 유형과 이러한 위험을 완화하기 위해 사용할 수 있는 기본 전략을 이해해야 합니다.
XSLT 확장
인기 있는 두 XSLT 확장은 스타일시트 스크립팅 및 확장 개체입니다. 이러한 확장을 사용하면 XSLT 프로세서에서 코드를 실행할 수 있습니다.
확장 개체는 XSL 변환에 프로그래밍 기능을 추가합니다.
확장 요소를 사용하여 스타일시트에 스크립트를
msxsl:script포함할 수 있습니다.
확장 개체
확장 개체는 메서드를 AddExtensionObject 사용하여 추가됩니다. 확장 개체를 지원하려면 FullTrust 권한 집합이 필요합니다. 이렇게 하면 확장 개체 코드가 실행될 때 권한 상승이 발생하지 않습니다. FullTrust 권한 없이 AddExtensionObject 메서드를 호출하려고 시도하면 보안 예외가 발생합니다.
스타일시트 스크립트
확장 요소를 사용하여 스타일시트에 스크립트를 msxsl:script 포함할 수 있습니다. 스크립트 지원은 기본적으로 사용하지 않도록 설정되는 클래스의 XslCompiledTransform 선택적 기능입니다.
XsltSettings.EnableScript 속성을 true로 설정하고, XsltSettings 객체를 Load 메서드에 전달하여 스크립팅을 활성화할 수 있습니다.
비고
스크립트 블록은 .NET Framework에서만 지원됩니다. .NET Core 또는 .NET 5 이상에서는 지원 되지 않습니다 .
지침
스타일시트가 신뢰할 수 있는 원본에서 제공되는 경우에만 스크립팅을 사용하도록 설정합니다. 스타일시트의 원본을 확인할 수 없거나 스타일시트가 신뢰할 수 있는 원본에서 제공되지 않는 경우 XSLT 설정 인수에 null 전달합니다.
외부 리소스
XSLT 언어에는 xsl:import, xsl:include, 또는 document() 함수와 같은 기능이 있으며, 프로세서는 URI 참조를 확인해야 합니다. 클래스 XmlResolver 는 외부 리소스를 확인하는 데 사용됩니다. 외부 리소스는 다음 두 가지 경우에 해결해야 할 수 있습니다.
스타일 시트를 컴파일할 때, XmlResolver는
xsl:import과xsl:include해상도를 해결하는 데 사용됩니다.변환을 실행할 때, XmlResolver은
document()함수를 해결하는 데 사용됩니다.비고
document()이 함수는 기본적으로 클래스에서 사용하지 않도록 설정됩니다XslCompiledTransform. XsltSettings.EnableDocumentFunction 속성을true로 설정하고 XsltSettings 개체를 Load 메서드에 전달하여 이 기능을 사용할 수 있습니다.
Load 및 Transform 메서드 각각은 XmlResolver를 인수 중 하나로 허용하는 오버로드를 포함합니다. XmlResolver 지정하지 않으면 자격 증명이 없는 기본값 XmlUrlResolver 이 사용됩니다.
지침
스타일시트가 document() 신뢰할 수 있는 원본에서 가져온 경우에만 함수를 사용하도록 설정합니다.
다음 목록에서는 XmlResolver 개체를 지정하고자 할 때를 설명합니다.
XSLT 프로세스가 인증이 필요한 네트워크 리소스에 액세스해야 하는 경우 필요한 자격 증명과 XmlResolver 함께 사용할 수 있습니다.
XSLT 프로세스에서 액세스할 수 있는 리소스를 제한하려면 올바른 권한 집합을 XmlSecureResolver 사용하여 사용할 수 있습니다. XmlSecureResolver 제어하지 않거나 신뢰할 수 없는 리소스를 열어야 하는 경우 클래스를 사용합니다.
동작을 사용자 지정하려는 경우 고유한 클래스를 XmlResolver 구현하고 이를 사용하여 리소스를 확인할 수 있습니다.
외부 리소스에 액세스하지 않도록 하려면
null인수를 XmlResolver로 지정할 수 있습니다.
참고하십시오
.NET