Средство чтения 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