Поделиться через


средство чтения 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 используются следующие функции:

С модулями чтения XML используется следующий дескриптор:

С модулями чтения XML используются следующие структуры: