다음을 통해 공유


XML Reader

XML 판독기는 XML의 입력 원본에 대한 커서입니다. XML 판독기는 한 번에 하나의 XML 노드 를 읽지만 노드 시퀀스를 더 쉽게 읽을 수 있는 추가 도우미 API가 있습니다.

다음과 같은 유형의 판독기 입력이 지원됩니다.

보안

판독기는 요소에 있는 특성이 고유한지 확인합니다. 이 유효성 검사를 수행하는 데 필요한 시간은 요소의 특성 수에 대한 함수로 , WS_XML_READER_PROPERTY_MAX_ATTRIBUTES 만큼 클 수 있습니다. 따라서 WS_XML_READER_PROPERTY_MAX_ATTRIBUTES 큰 값으로 설정된 경우 큰 문서를 처리하면 서비스 거부 공격이 발생할 수 있습니다.

판독기는 각 요소 및 특성에 대한 네임스페이스에 접두사를 매핑합니다. 이 매핑을 수행하는 데 필요한 시간은 scope xmlns 특성 수의 함수로 WS_XML_READER_PROPERTY_MAX_NAMESPACES 수 있습니다. 따라서 이 속성이 큰 값으로 설정된 경우 큰 문서를 처리하면 서비스 거부 공격이 발생할 수 있습니다.

판독기는 문서가 xml의 문법 사양을 따르고 해당 측면이 지정된 할당량 내에 있는지 확인하지만 신뢰할 수 없는 원본에서 가져올 때 문서의 내용은 여전히 신뢰할 수 없는 것으로 간주되어야 합니다. 판독기 사용자는 WsReadToStartElement, WsFindAttribute를 사용하거나 노드를 수동으로 검사하여 모든 요소 및 특성 이름 및 네임스페이스를 검사 합니다.

고려해야 할 몇 가지 다른 상황에는 다음이 포함되지만 이에 국한되지는 않습니다.

  • 필요한 요소가 누락되었을 수 있습니다.
  • 예기치 않은 요소가 나타날 수 있음
  • 예상 특성이 누락되었을 수 있습니다.
  • 예기치 않은 특성이 나타날 수 있음
  • 요소가 빈 요소로 나타날 수 있음
  • 공백이 예기치 않은 위치에 나타날 수 있음

판독기 사용자는 문서에서 읽은 값에 따라 메모리를 할당해서는 안 됩니다. 예를 들어 다음 xml 문서를 고려합니다.

<array count='1000000'>
   <!-- malicious document provider didn't actually provide 1000000 array items -->
</array>

일부 요소가 따를 것이라는 가정하에 솔리를 기반으로 배열을 할당하는 것은 잠재적인 공격 벡터입니다. 이 경우 판독기 사용자는 요소가 나타날 때 메모리를 증분 방식으로 할당해야 합니다.

XML 판독기는 DTD를 지원하지 않습니다. 판독기 사용자는 DTD 확인에 대해 걱정할 필요가 없습니다.

다음 콜백은 XML 판독기에서 사용됩니다.

다음 열거형은 XML 판독기에서 사용됩니다.

다음 함수는 XML 판독기에서 사용됩니다.

다음 핸들은 XML 판독기에서 사용됩니다.

다음 구조는 XML 판독기에서 사용됩니다.