XML-olvasó
Az XML-olvasó egy kurzor az XML bemeneti forrása felett. Az XML-olvasó a lényege, hogy egyszerre egy XML-csomópont olvas be, de további segéd API-k is segítik a csomópontok sorozatának olvasását.
A következő típusú olvasói bemenetek támogatottak:
- Kódolt bájtok memóriabeli puffere
- stream
- XML-puffer
Biztonság
Az olvasó ellenőrzi, hogy az elemen található attribútumok egyediek-e. Az ellenőrzés végrehajtásához szükséges idő az elemen lévő attribútumok számának függvénye, amely a WS_XML_READER_PROPERTY_MAX_ATTRIBUTESis lehet. Ezért a nagy méretű dokumentumok feldolgozása, amikor WS_XML_READER_PROPERTY_MAX_ATTRIBUTES nagy értékre van állítva, szolgáltatásmegtagadásos támadást eredményezhet.
Az olvasó az előtagokat az egyes elemek és attribútumok névtereihez rendeli. A leképezés végrehajtásához szükséges idő az xmlns attribútumok számának függvénye a hatókörben, amely akár WS_XML_READER_PROPERTY_MAX_NAMESPACESis lehet. Ezért a nagy méretű dokumentumok nagy értékűre való beállítása esetén a szolgáltatásmegtagadásos támadás lehetősége is lehet.
Bár az olvasó gondoskodik arról, hogy a dokumentum az xml nyelvhelyességi specifikációját kövesse, és hogy szempontjai a megadott kvótákon belül legyenek, a dokumentum tartalmát továbbra is nem megbízhatónak kell tekinteni, ha nem megbízható forrásból származik. Az olvasó felhasználóinak a WsReadToStartElement , a WsFindAttributevagy a csomópontokmanuális vizsgálatával kell ellenőriznie az összes elem- és attribútumnevet és névteret.
Néhány egyéb megfontolandó helyzet, de nem korlátozódnak a következőkre:
- Előfordulhat, hogy a várt elemek hiányoznak
- Váratlan elemek jelenhetnek meg
- Előfordulhat, hogy a várt attribútumok hiányoznak
- Váratlan attribútumok jelenhetnek meg
- Az elemek üres elemként jelenhetnek meg
- A whitespace nem várt helyeken jelenhet meg
Az olvasó felhasználói nem foglalhatják le a memóriát egyszerűen a dokumentumból beolvasott értékek alapján. Vegyük például a következő XML-dokumentumot:
<array count='1000000'>
<!-- malicious document provider didn't actually provide 1000000 array items -->
</array>
Egy soley-alapú tömb kiosztása abból a feltételezésből indul ki, hogy néhány elem követni fog egy lehetséges támadási vektort. Ebben az esetben az olvasó felhasználójának inkább növekményesen kell lefoglalnia a memóriát az elemek megjelenésekor.
Az XML-olvasó nem támogatja a DTD-t. Az olvasó felhasználójának nem kell aggódnia a DTD-ellenőrzéssel kapcsolatban.
Az XML-olvasók a következő visszahívást használják:
Az XML-olvasók az alábbi enumerálásokat használják:
Az XML-olvasók a következő függvényeket használják:
- 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
Az XML-olvasók a következő leírót használják:
Az XML-olvasók a következő struktúrákat használják:
- 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