System.Xml 네임스페이스
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
XML 처리를 위한 표준 기반 지원을 제공합니다.
클래스
| Name | Description |
|---|---|
| NameTable |
단일 스레드를 구현합니다 XmlNameTable. |
| UniqueId |
Guid에 최적화된 고유 식별자입니다. |
| XmlAttribute |
특성을 나타냅니다. 특성의 유효한 값과 기본값은 DTD(문서 형식 정의) 또는 스키마에 정의됩니다. |
| XmlAttributeCollection |
이름 또는 인덱스로 액세스할 수 있는 특성의 컬렉션을 나타냅니다. |
| XmlBinaryReaderSession |
최적화된 문자열을 동적으로 관리할 수 있습니다. |
| XmlBinaryWriterSession |
동적 사전을 사용하여 메시지에 표시되고 상태를 유지 관리하는 공통 문자열을 압축할 수 있습니다. |
| XmlCDataSection |
CDATA 섹션을 나타냅니다. |
| XmlCharacterData |
여러 클래스에서 사용하는 텍스트 조작 메서드를 제공합니다. |
| XmlComment |
XML 주석의 내용을 나타냅니다. |
| XmlConvert |
XML 이름을 인코딩 및 디코딩하고 공용 언어 런타임 형식과 XSD(XML 스키마 정의 언어) 형식 간에 변환하는 메서드를 제공합니다. 데이터 형식을 변환할 때 반환되는 값은 로캘과 독립적입니다. |
| XmlDataDocument |
관계형을 통해 구조화된 데이터를 저장, 검색 및 조작할 수 있습니다 DataSet. |
| XmlDeclaration |
XML 선언 노드 <?xml version='1.0'...?>을 나타냅니다. |
| XmlDictionary |
WCF(Windows Communication Foundation)의 XML 판독기/기록기 구현을 최적화하는 데 사용되는 사전을 구현합니다. |
| XmlDictionaryReader |
|
| XmlDictionaryReaderQuotas |
XmlDictionaryReaders에 대한 구성 가능한 할당량 값을 포함합니다. |
| XmlDictionaryString |
에 저장된 XmlDictionary항목을 나타냅니다. |
| XmlDictionaryWriter |
WCF(Windows Communication Foundation)가 serialization 및 역직렬화를 수행할 때 XmlWriter 파생되는 추상 클래스를 나타냅니다. |
| XmlDocument |
XML 문서를 나타냅니다. 이 클래스를 사용하여 문서에서 XML을 로드, 유효성 검사, 편집, 추가 및 배치할 수 있습니다. |
| XmlDocumentFragment |
트리 삽입 작업에 유용한 경량 개체를 나타냅니다. |
| XmlDocumentType |
문서 형식 선언을 나타냅니다. |
| XmlDocumentXPathExtensions |
문서 탐색에 XmlNode 대한 확장 메서드를 XmlDocument 제공합니다. |
| XmlElement |
요소를 나타냅니다. |
| XmlEntity |
!와 같은 <엔터티 선언을 나타냅니다. 엔터티... > |
| XmlEntityReference |
엔터티 참조 노드를 나타냅니다. |
| XmlException |
마지막 예외에 대한 자세한 정보를 반환합니다. |
| XmlImplementation |
개체 집합 XmlDocument 의 컨텍스트를 정의합니다. |
| XmlLinkedNode |
이 노드 바로 앞이나 다음 노드를 가져옵니다. |
| XmlNamedNodeMap |
이름 또는 인덱스로 액세스할 수 있는 노드의 컬렉션을 나타냅니다. |
| XmlNamespaceManager |
컬렉션에 대한 네임스페이스를 확인, 추가 및 제거하고 이러한 네임스페이스에 대한 범위 관리를 제공합니다. |
| XmlNameTable |
원자화된 문자열 개체의 테이블입니다. |
| XmlNode |
XML 문서의 단일 노드를 나타냅니다. |
| XmlNodeChangedEventArgs |
, , NodeChangingNodeInsertingNodeInsertedNodeRemoved 및 NodeRemoving 이벤트에 대한 NodeChanged데이터를 제공합니다. |
| XmlNodeList |
노드의 정렬된 컬렉션을 나타냅니다. |
| XmlNodeReader |
에 있는 XML 데이터에 XmlNode대한 빠른 캐시가 아닌 전달 전용 액세스를 제공하는 판독기를 나타냅니다. |
| XmlNotation |
!와 같은 <표기법 선언을 나타냅니다. 표기법... > |
| XmlParserContext |
XML 조각을 구문 분석하는 데 필요한 XmlReader 모든 컨텍스트 정보를 제공합니다. |
| XmlProcessingInstruction |
XML이 문서 텍스트에 프로세서 관련 정보를 유지하도록 정의하는 처리 명령을 나타냅니다. |
| XmlQualifiedName |
XML 정규화된 이름을 나타냅니다. |
| XmlReader |
XML 데이터에 대한 빠르고, 캐시되지 않은, 전달 전용 액세스를 제공하는 판독기를 나타냅니다. |
| XmlReaderSettings | |
| XmlResolver |
URI(Uniform Resource Identifier)로 명명된 외부 XML 리소스를 확인합니다. |
| XmlSecureResolver |
개체를 래핑 XmlResolver 하고 기본 XmlResolver 에서 액세스할 수 있는 리소스를 제한하여 다른 구현 XmlResolver 을 보호하는 데 도움이 됩니다. |
| XmlSignificantWhitespace |
혼합 콘텐츠 노드의 태그 또는 xml:space= 'preserve' 범위 내의 공백 사이의 공백을 나타냅니다. 이를 상당한 공백이라고도 합니다. |
| XmlText |
요소 또는 특성의 텍스트 내용을 나타냅니다. |
| XmlTextReader |
XML 데이터에 대한 빠르고 캐시하지 않은 전달 전용 액세스를 제공하는 판독기를 나타냅니다. 대신 클래스를 XmlReader 사용하는 것이 좋습니다. |
| XmlTextWriter |
W3C XML(Extensible Markup Language) 1.0 및 XML 권장 사항의 네임스페이스를 준수하는 XML 데이터가 포함된 스트림 또는 파일을 생성하는 빠르고 캐시되지 않은 전달 전용 방법을 제공하는 작성기를 나타냅니다. 대신 클래스를 XmlWriter 사용하는 것이 좋습니다. |
| XmlUrlResolver |
URI(Uniform Resource Identifier)로 명명된 외부 XML 리소스를 확인합니다. |
| XmlValidatingReader |
DTD(문서 형식 정의), XDR(XML-Data 축소) 스키마 및 XSD(XML 스키마 정의 언어) 유효성 검사를 제공하는 판독기를 나타냅니다. 이 클래스는 사용되지 않습니다. 클래스와 Create 메서드를 XmlReaderSettings 사용하여 유효성 검사 XML 판독기를 만드는 것이 좋습니다. |
| XmlWhitespace |
요소 콘텐츠의 공백을 나타냅니다. |
| XmlWriter |
XML 데이터가 포함된 스트림 또는 파일을 생성하는 빠르고 캐시가 아닌 전달 전용 방법을 제공하는 기록기를 나타냅니다. |
| XmlWriterSettings | |
| XmlXapResolver |
XmlXapResolver 형식은 Silverlight 애플리케이션의 XAP 패키지에서 리소스를 확인하는 데 사용됩니다. |
인터페이스
| Name | Description |
|---|---|
| IApplicationResourceStreamResolver |
애플리케이션 리소스 스트림 확인자를 나타냅니다. |
| IFragmentCapableXmlDictionaryWriter |
에 의해 XmlDictionaryWriter구현될 때 XML 조각을 처리할 수 있는 속성과 메서드를 포함합니다. |
| IHasXmlNode |
클래스가 현재 컨텍스트 또는 위치에서 반환 XmlNode 할 수 있도록 합니다. |
| IStreamProvider |
스트림을 제공하는 클래스에서 구현할 수 있는 인터페이스를 나타냅니다. |
| IXmlBinaryReaderInitializer |
이진 판독기를 다시 초기화하여 새 문서를 읽는 메서드를 제공합니다. |
| IXmlBinaryWriterInitializer |
이 인터페이스에서 파생되는 XML 이진 작성기에 대한 구현 요구 사항을 지정합니다. |
| IXmlDictionary |
|
| IXmlLineInfo |
클래스가 줄 및 위치 정보를 반환할 수 있도록 하는 인터페이스를 제공합니다. |
| IXmlMtomReaderInitializer |
이 인터페이스에서 파생되는 XML MTOM 판독기 구현 요구 사항을 지정합니다. |
| IXmlMtomWriterInitializer |
MTOM 작성기에 의해 구현되는 경우 이 인터페이스는 MTOM 작성기에 대한 초기화를 보장합니다. |
| IXmlNamespaceResolver |
접두사 및 네임스페이스 매핑 집합에 대한 읽기 전용 액세스를 제공합니다. |
| IXmlTextReaderInitializer |
이 인터페이스에서 파생되는 XML 텍스트 판독기 구현 요구 사항을 지정합니다. |
| IXmlTextWriterInitializer |
이 인터페이스에서 파생되는 XML 텍스트 작성기에 대한 구현 요구 사항을 지정합니다. |
열거형
| Name | Description |
|---|---|
| ConformanceLevel | |
| DtdProcessing |
DTD 처리 옵션을 지정합니다. DtdProcessing 열거형은 XmlReaderSettings 클래스에서 사용됩니다. |
| EntityHandling |
XmlTextReader 또는 XmlValidatingReader 엔터티를 처리하는 방법을 지정합니다. |
| Formatting |
XmlTextWriter대한 서식 옵션을 지정합니다. |
| NamespaceHandling |
XmlWriter중복 네임스페이스 선언을 제거할지 여부를 지정합니다. |
| NewLineHandling |
줄 바꿈을 처리하는 방법을 지정합니다. |
| ReadState |
판독기의 상태를 지정합니다. |
| ValidationType |
수행할 유효성 검사 유형을 지정합니다. |
| WhitespaceHandling |
공백 처리 방법을 지정합니다. |
| WriteState |
XmlWriter상태를 지정합니다. |
| XmlDateTimeSerializationMode |
문자열과 DateTime간에 변환할 때 시간 값을 처리하는 방법을 지정합니다. |
| XmlDictionaryReaderQuotaTypes |
XmlDictionaryReaders의 구성 가능한 할당량 값을 열거합니다. |
| XmlNamespaceScope |
네임스페이스 범위를 정의합니다. |
| XmlNodeChangedAction |
노드 변경 유형을 지정합니다. |
| XmlNodeOrder |
두 번째 노드와 비교하여 노드의 문서 순서를 설명합니다. |
| XmlNodeType |
노드의 형식을 지정합니다. |
| XmlOutputMethod |
XmlWriter 출력을 serialize하는 데 사용되는 메서드를 지정합니다. |
| XmlSpace |
현재 |
| XmlTokenizedType |
문자열의 XML 형식을 나타냅니다. 이렇게 하면 문자열을 특정 XML 형식(예: CDATA 섹션 형식)으로 읽을 수 있습니다. |
대리자
| Name | Description |
|---|---|
| OnXmlDictionaryReaderClose |
|
| XmlNodeChangedEventHandler |
, NodeChanging, NodeRemovedNodeInsertedNodeInserting및 NodeRemoving 이벤트를 처리하는 NodeChanged메서드를 나타냅니다. |
설명
지원되는 표준
네임스페이 System.Xml 스는 다음 표준을 지원합니다.
- DTD 지원을 포함한 XML 1.0
- 스트림 수준 및 DOM 모두의 XML 네임스페이스
- XML 스키마
- XPath 식
- XSLT 변환
- DOM 수준 1 코어
- DOM 수준 2 코어
XML 클래스 가 W3C 권장 사항과 다른 두 가지 경우는 W3C 사양의 차이점 섹션을 참조하세요.
비동기적으로 XML 처리
및 System.Xml.XmlWriter 클래스에는 System.Xml.XmlReader 비동기 프로그래밍 모델을 기반으로 하는 여러 비동기 메서드가 포함됩니다. 이러한 메서드는 이름 끝에 있는 문자열 "Async"로 식별할 수 있습니다. 이러한 메서드를 사용하면 동기 코드와 비슷한 비동기 코드를 작성할 수 있으며, 기존 동기 코드를 비동기 코드로 쉽게 마이그레이션할 수 있습니다.
상당한 네트워크 스트림 대기 시간이 있는 앱에서 비동기 메서드를 사용합니다. 메모리 스트림 또는 로컬 파일 스트림 읽기/쓰기 작업에 비동기 API를 사용하지 마세요. 입력 스트림 XmlTextReader은 XmlTextWriter 비동기 작업도 지원해야 합니다. 그렇지 않으면 스레드가 I/O 작업에 의해 계속 차단됩니다.
키워드를 사용하지 않거나 비동기 함수가 필요한 동기 API를 사용하는
await것을 잊어버릴 수 있으므로 동기 및 비동기 함수 호출을 혼합하지 않는 것이 좋습니다.비동기 메서드를 XmlReaderSettings.AsyncXmlWriterSettings.Async
true사용하지 않으려면 플래그를 설정하지 마세요.비동기 메서드를 호출할 때 키워드를 지정
await하는 것을 잊어버린 경우 결과는 결정적이지 않습니다. 예상한 결과나 예외가 나타날 수 있습니다.XmlReader 개체가 큰 텍스트 노드를 읽는 경우 부분 텍스트 값만 캐시하고 텍스트 노드를 XmlReader.Value 반환할 수 있으므로 I/O 작업으로 인해 속성 검색이 차단될 수 있습니다. 메서드를 XmlReader.GetValueAsync 사용하여 비동기 모드에서 텍스트 값을 얻거나 메서드를 XmlReader.ReadValueChunkAsync 사용하여 큰 텍스트 블록을 청크 단위로 읽습니다.
개체를 XmlWriter 사용하는 경우 I/O 작업을 차단하지 않도록 호출하기 전에 메서드를 호출 XmlWriter.FlushAsyncXmlWriter.Close 합니다.
W3C 사양의 차이점
모델 그룹 스키마 구성 요소에 대한 제약 조건이 포함된 두 경우 네임스페이스는 System.Xml W3C 권장 사항과 다릅니다.
요소 선언의 일관성:
대체 그룹을 사용하는 System.Xml 경우 구현이 W3C 사양의 모델 그룹 스키 마 구성 요소에 대한 제약 조건 섹션에 설명된 "스키마 구성 요소 제약 조건: 요소 선언 일관성"을 충족하지 않는 경우도 있습니다.
예를 들어 다음 스키마에는 이름이 같지만 동일한 콘텐츠 모델의 형식이 다른 요소가 포함되며 대체 그룹이 사용됩니다. 이로 인해 오류가 발생하지만 System.Xml 오류 없이 스키마를 컴파일하고 유효성을 검사합니다.
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="e1" type="t1"/>
<xs:complexType name="t1"/>
<xs:element name="e2" type="t2" substitutionGroup="e1"/>
<xs:complexType name="t2">
<xs:complexContent>
<xs:extension base="t1">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="t3">
<xs:sequence>
<xs:element ref="e1"/>
<xs:element name="e2" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
이 스키마에서 형식 t3 에는 요소 시퀀스가 포함됩니다. 대체로 인해 시퀀스의 요소 e1 에 대한 참조는 형식 요소 e1 또는 형식 t1t2요소 e2 로 발생할 수 있습니다. 후자의 경우 두 e2 요소의 시퀀스가 생성됩니다. 여기서 하나는 형식이고 다른 하나는 형식 t2xs:int입니다.
고유 파티클 특성:
다음 조건에서 System.Xml 구현은 W3C 사양의 모델 그룹 스키마 구성 요소에 대한 제약 조건 섹션에 설명된 "스키마 구성 요소 제약 조건: 고유 파티클 특성"을 충족하지 않습니다.
- 그룹의 요소 중 하나가 다른 요소를 참조합니다.
- 참조된 요소는 대체 그룹의 헤드 요소입니다.
- 대체 그룹에는 그룹의 요소 중 하나와 이름이 같은 요소가 포함됩니다.
- 대체 그룹 헤드 요소와 대체 그룹 요소와 이름이 같은 요소를 참조하는 요소의 카디널리티가 고정되지 않았습니다(minOccurs < maxOccurs).
- 대체 그룹을 참조하는 요소의 정의는 대체 그룹 요소와 이름이 같은 요소의 정의 앞에 섰습니다.
예를 들어 아래의 스키마에서 콘텐츠 모델은 모호하며 컴파일 오류가 발생하지만 System.Xml 오류 없이 스키마를 컴파일해야 합니다.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="e1" type="xs:int"/>
<xs:element name="e2" type="xs:int" substitutionGroup="e1"/>
<xs:complexType name="t3">
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="e3" type="t3"/>
</xs:schema>
위의 스키마에 대해 다음 XML의 유효성을 검사하려고 하면 "'e3' 요소에 잘못된 자식 요소 'e2'가 있습니다."라는 메시지와 함께 유효성 검사가 실패하고 XmlSchemaValidationException 예외가 throw됩니다.
<e3>
<e2>1</e2>
<e2>2</e2>
</e3>
이 문제를 해결하려면 XSD 문서에서 요소 선언을 교환할 수 있습니다. 다음은 그 예입니다.
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
은 다음과 같이 됩니다.
<xs:sequence>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
동일한 문제의 또 다른 예는 다음과 같습니다.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="e1" type="xs:string"/>
<xs:element name="e2" type="xs:string" substitutionGroup="e1"/>
<xs:complexType name="t3">
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="e3" type="t3"/>
</xs:schema>
위의 스키마에 대해 다음 XML의 유효성을 검사하려고 하면 "처리되지 않은 예외: System.Xml.Schema.XmlSchemaValidationException: 'e2' el 요소가 잘못되었습니다. 데이터 형식 'http://www.w3.org/2001/XMLSchema:int' 에 따라 'abc' 값이 잘못되었습니다. 문자열 'abc'는 유효한 Int32 값이 아닙니다."라는 예외를 제외하고 유효성 검사가 실패합니다.
<e3><e2>abc</e2></e3>
보안 고려 사항
네임스페이 System.Xml 스의 형식과 멤버는 .NET 보안 시스템을 사용합니다. 다음 섹션에서는 XML 기술과 관련된 보안 문제에 대해 설명합니다.
또한 형식 및 멤버를 System.Xml 사용하는 경우 XML에 잠재적인 개인 정보 보호에 영향을 주는 데이터가 포함된 경우 최종 사용자의 개인 정보를 존중하는 방식으로 앱을 구현해야 합니다.
외부 액세스
여러 XML 기술에는 처리 중에 다른 문서를 검색할 수 있는 기능이 있습니다. 예를 들어 DTD(문서 형식 정의)는 구문 분석 중인 문서에 상주할 수 있습니다. DTD는 구문 분석 중인 문서에서 참조하는 외부 문서에도 있을 수 있습니다. XSD(XML 스키마 정의 언어) 및 XSLT 기술도 다른 파일의 정보를 포함할 수 있습니다. 이러한 외부 리소스는 몇 가지 보안 문제를 제시할 수 있습니다. 예를 들어 앱이 신뢰할 수 있는 사이트에서만 파일을 검색하고 검색하는 파일에 악성 데이터가 포함되지 않도록 해야 합니다.
이 XmlUrlResolver 클래스는 XML 문서를 로드하고 엔터티, DTD 또는 스키마와 같은 외부 리소스를 확인하고 지시문을 가져오거나 포함하는 데 사용됩니다.
이 클래스를 재정의하고 사용할 개체를 XmlResolver 지정할 수 있습니다. XmlSecureResolver 제어하지 않거나 신뢰할 수 없는 리소스를 열어야 하는 경우 클래스를 사용합니다. 래 XmlSecureResolver 핑을 XmlResolver 통해 기본 XmlResolver 에서 액세스할 수 있는 리소스를 제한할 수 있습니다.
서비스 거부
다음 시나리오는 클래스가 이러한 공격으로부터 보호하는 수단을 제공하기 때문에 System.Xml 서비스 거부 공격에 덜 취약한 것으로 간주됩니다.
텍스트 XML 데이터 구문 분석
Microsoft SQL Server에서 이진 XML 데이터를 생성한 경우 이진 XML 데이터를 구문 분석합니다.
데이터 원본에서 파일 시스템, 스트림, 스트림 또는 StringBuilder에 XML 문서 및 TextWriter조각 작성
개체를 사용하고 있는 경우 문서를 DOM(문서 개체 모델) 개체 XmlReaderSettings.DtdProcessing 로 XmlReaderDtdProcessing.Prohibit로드합니다.
DOM 개체 탐색
서비스 거부 공격이 우려되거나 신뢰할 수 없는 환경에서 작업하는 경우에는 다음 시나리오를 사용하지 않는 것이 좋습니다.
DTD 처리.
스키마 처리. 여기에는 스키마 컬렉션에 신뢰할 수 없는 스키마를 추가하고, 신뢰할 수 없는 스키마를 컴파일하고, 신뢰할 수 없는 스키마를 사용하여 유효성을 검사하는 작업이 포함됩니다.
XSLT 처리.
사용자가 제공한 이진 XML 데이터의 임의의 스트림을 구문 분석합니다.
쿼리, 편집, 문서 간에 하위 트리 이동 및 DOM 개체 저장과 같은 DOM 작업입니다.
서비스 거부 문제가 우려되거나 신뢰할 수 없는 원본을 처리하는 경우 DTD 처리를 사용하도록 설정하지 마세요. 메서드가 만드는 개체 XmlReader.Create 에서는 XmlReader 기본적으로 사용하지 않도록 설정됩니다.
메모
기본적으로 XmlTextReader DTD 처리를 허용합니다. 이 XmlTextReader.DtdProcessing 기능을 사용하지 않도록 설정하려면 이 속성을 사용합니다.
DTD 처리를 사용하도록 설정한 경우 클래스를 XmlSecureResolver 사용하여 액세스할 수 있는 리소스를 XmlReader 제한할 수 있습니다. XML 처리가 메모리 및 시간이 제한되도록 앱을 디자인할 수도 있습니다. 예를 들어 ASP.NET 앱에서 시간 제한 제한을 구성할 수 있습니다.
처리 고려 사항
XML 문서에는 다른 파일에 대한 참조가 포함될 수 있으므로 XML 문서를 구문 분석하는 데 필요한 처리 능력을 확인하기가 어렵습니다. 예를 들어 XML 문서에는 DTD가 포함될 수 있습니다. DTD에 중첩된 엔터티 또는 복합 콘텐츠 모델이 포함된 경우 문서를 구문 분석하는 데 시간이 너무 오래 걸릴 수 있습니다.
사용하는 XmlReader경우 속성을 설정 XmlReaderSettings.MaxCharactersInDocument 하여 구문 분석할 수 있는 문서의 크기를 제한할 수 있습니다. 속성을 설정하여 엔터티를 확장하여 발생하는 문자 수를 제한할 XmlReaderSettings.MaxCharactersFromEntities 수 있습니다. 이러한 속성을 설정하는 예제는 적절한 참조 항목을 참조하세요.
XSD 및 XSLT 기술에는 처리 성능에 영향을 줄 수 있는 추가 기능이 있습니다. 예를 들어 비교적 작은 문서를 통해 평가할 때 처리할 상당한 시간이 필요한 XML 스키마를 생성할 수 있습니다. XSLT 스타일시트 내에 스크립트 블록을 포함할 수도 있습니다. 두 경우 모두 앱에 잠재적인 보안 위협이 됩니다.
클래스를 사용하는 XslCompiledTransform 앱을 만들 때 다음 항목과 해당 의미를 알고 있어야 합니다.
XSLT 스크립팅은 기본적으로 사용하지 않도록 설정됩니다. XSLT 스크립팅은 스크립트 지원이 필요하고 완전히 신뢰할 수 있는 환경에서 작업하는 경우에만 사용하도록 설정해야 합니다.
XSLT
document()함수는 기본적으로 사용하지 않도록 설정됩니다.document()기능을 사용하도록 설정하면, XmlSecureResolver 개체를 XslCompiledTransform.Transform 메서드에 전달하여 액세스할 수 있는 리소스를 제한할 수 있습니다.확장 개체는 기본적으로 사용하도록 설정됩니다. XsltArgumentList 확장 개체를 포함하는 개체가 메서드에 XslCompiledTransform.Transform 전달되면 확장 개체가 사용됩니다.
XSLT 스타일시트에는 다른 파일 및 포함된 스크립트 블록에 대한 참조가 포함될 수 있습니다. 악의적인 사용자는 실행 시 컴퓨터가 리소스에서 부족해질 때까지 시스템이 처리되도록 할 수 있는 데이터 또는 스타일시트를 제공하여 이를 악용할 수 있습니다.
혼합 신뢰 환경에서 실행되는 XSLT 앱은 스타일시트 스푸핑이 발생할 수 있습니다. 예를 들어 악의적인 사용자는 유해한 스타일시트를 사용하여 개체를 로드하고 나중에 메서드를 호출 XslCompiledTransform.Transform 하고 변환을 실행하는 다른 사용자에게 전달할 수 있습니다.
스타일시트가 신뢰할 수 있는 원본에서 제공되지 않는 한 스크립팅 또는 document() 함수를 사용하도록 설정하지 않고 신뢰할 수 없는 원본의 개체, XSLT 스타일시트 또는 XML 원본 데이터를 허용하지 XslCompiledTransform 않음으로써 이러한 보안 문제를 완화할 수 있습니다.
예외 처리
하위 수준 구성 요소에서 throw된 예외는 앱에 노출하지 않으려는 경로 정보를 공개할 수 있습니다. 앱은 예외를 catch하고 적절하게 처리해야 합니다.