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


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