средство чтения XML
Средство чтения XML — это курсор на источник входных данных XML. По сути, средство чтения XML считывает по одному XML-узлу за раз, но существуют дополнительные вспомогательные API, которые упрощают чтение последовательности узлов.
Поддерживаются следующие типы входных данных для чтения:
Читатель проверит, что атрибуты, имеющиеся в элементе, уникальны. Время, необходимое для выполнения этой проверки, зависит от количества атрибутов в элементе, которое может быть равно WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Таким образом, обработка больших документов, если WS_XML_READER_PROPERTY_MAX_ATTRIBUTES имеет большое значение, может привести к атаке типа "отказ в обслуживании".
Средство чтения сопоставляет префиксы с пространствами имен для каждого элемента и атрибутов. Время, необходимое для выполнения этого сопоставления, определяет количество атрибутов 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 используются следующие функции:
- WsCreateReader
- WsFillReader
- WsFindAttribute
- WsFreeReader
- WsGetNamespaceFromPrefix
- WsGetReaderNode
- WsGetReaderPosition
- WsGetReaderProperty
- WsGetXmlAttribute
- WsMoveReader
- WsReadArray
- WsReadBytes
- WsReadChars
- WsReadCharsUtf8
- WsReadEndAttribute
- WsReadEndElement
- WsReadNode
- WsReadQualifiedName
- WsReadStartAttribute
- WsReadStartElement
- WsReadToStartElement
- WsReadValue
- WsSetInput
- WsSetInputToBuffer
- WsSetReaderPosition
- WsSkipNode
С модулями чтения XML используется следующий дескриптор:
С модулями чтения XML используются следующие структуры:
- WS_XML_READER_BINARY_ENCODING
- WS_XML_READER_BUFFER_INPUT
- WS_XML_READER_ENCODING
- WS_XML_READER_INPUT
- WS_XML_READER_MTOM_ENCODING
- WS_XML_READER_PROPERTIES
- WS_XML_READER_PROPERTY
- WS_XML_READER_STREAM_INPUT
- WS_XML_READER_TEXT_ENCODING