Czytnik XML
Czytnik XML to kursor nad źródłem wejściowym XML. W jego rdzeniu czytnik XML odczytuje jeden węzeł XML jednocześnie, ale istnieją dodatkowe interfejsy API pomocnika, aby ułatwić odczytywanie sekwencji węzłów.
Obsługiwane są następujące typy danych wejściowych czytników:
- bufor w pamięci zakodowanych bajtów
- strumienia
- buforu XML
Bezpieczeństwo
Czytelnik sprawdzi, czy atrybuty obecne w elemecie są unikatowe. Czas wymagany do przeprowadzenia tej weryfikacji jest funkcją liczby atrybutów w elemecie, który może być tak duży, jak WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. W związku z tym przetwarzanie dużych dokumentów, gdy WS_XML_READER_PROPERTY_MAX_ATTRIBUTES jest ustawiona na dużą wartość, może stanowić okazję do ataku typu "odmowa usługi".
Czytelnik mapuje prefiksy na przestrzenie nazw dla każdego elementu i atrybutów. Czas wymagany do wykonania tego mapowania jest funkcją liczby atrybutów xmlns w zakresie, który może być tak duży, jak WS_XML_READER_PROPERTY_MAX_NAMESPACES. W związku z tym przetwarzanie dużych dokumentów, gdy ta właściwość jest ustawiona na dużą wartość, może stanowić okazję do ataku typu "odmowa usługi".
Chociaż czytelnik zapewni, że dokument jest zgodny ze specyfikacją gramatyczną xml i ponadto, że jego aspekty znajdują się w określonych limitach przydziału, zawartość dokumentu musi być nadal uważana za niezaufaną podczas pochodzących z niezaufanego źródła. Użytkownicy czytelnika powinni sprawdzić wszystkie nazwy elementów i atrybutów i przestrzeni nazw przy użyciu WsReadToStartElement, WsFindAttributelub ręcznie sprawdzając węzły .
Niektóre inne sytuacje, które należy wziąć pod uwagę, ale nie są ograniczone do:
- Oczekiwane elementy mogą brakować
- Mogą pojawić się nieoczekiwane elementy
- Brak oczekiwanych atrybutów
- Mogą pojawić się nieoczekiwane atrybuty
- Elementy mogą być wyświetlane jako puste elementy
- Białe znaki mogą pojawiać się w nieoczekiwanych miejscach
Użytkownicy czytelnika nie powinni przydzielać pamięci na podstawie wartości odczytanych z dokumentu. Rozważmy na przykład następujący dokument XML:
<array count='1000000'>
<!-- malicious document provider didn't actually provide 1000000 array items -->
</array>
Przydzielanie tablicy na podstawie soley na założeniu, że niektóre elementy będą obserwowane, będzie potencjalnym wektorem ataku. Użytkownik czytelnika w tym przypadku powinien zamiast tego przyrostowo przydzielić pamięć w miarę wyświetlania elementów.
Czytnik XML nie obsługuje dtD. Użytkownik czytelnika nie musi martwić się o weryfikację DTD.
Następujące wywołanie zwrotne jest używane z czytnikami XML:
Następujące wyliczenia są używane z czytnikami XML:
Następujące funkcje są używane z czytnikami 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
Następujący uchwyt jest używany z czytnikami XML:
Następujące struktury są używane z czytnikami 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