XML-lezer
XML Reader is een cursor over een invoerbron van XML. In de kern leest een XML-lezer één XML-knooppunt tegelijk, maar er zijn extra helper-API's om het lezen van een reeks knooppunten eenvoudiger te maken.
De volgende typen invoer van lezers worden ondersteund:
Veiligheid
De lezer controleert of de kenmerken die aanwezig zijn op een element uniek zijn. De tijd die nodig is om deze validatie uit te voeren, is een functie van het aantal kenmerken op het element dat zo groot kan zijn als WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Daarom kan het verwerken van grote documenten wanneer WS_XML_READER_PROPERTY_MAX_ATTRIBUTES is ingesteld op een grote waarde een kans bieden voor een Denial of Service-aanval.
De lezer wijst voorvoegsels toe aan naamruimten voor elk element en elke kenmerk. De tijd die nodig is om deze toewijzing uit te voeren, is een functie van het aantal XMLNS-kenmerken binnen het bereik dat zo groot kan zijn als WS_XML_READER_PROPERTY_MAX_NAMESPACES. Daarom kan het verwerken van grote documenten wanneer deze eigenschap is ingesteld op een grote waarde een kans bieden voor een Denial of Service-aanval.
Hoewel de lezer ervoor zorgt dat het document de grammaticaspecificatie van XML volgt en bovendien dat de aspecten ervan binnen de opgegeven quota vallen, moet de inhoud van het document nog steeds als niet-vertrouwd worden beschouwd wanneer het afkomstig is van een niet-vertrouwde bron. Gebruikers van de lezer moeten alle element- en kenmerknamen en naamruimten controleren met behulp van WsReadToStartElement, WsFindAttribute-of door handmatig knooppuntente inspecteren.
Enkele andere situaties om rekening mee te houden, maar zijn niet beperkt tot:
- Verwachte elementen ontbreken mogelijk
- Onverwachte elementen kunnen worden weergegeven
- Verwachte kenmerken ontbreken mogelijk
- Onverwachte kenmerken kunnen worden weergegeven
- Elementen kunnen worden weergegeven als lege elementen
- Witruimte kan op onverwachte plaatsen worden weergegeven
Gebruikers van de lezer mogen geen geheugen toewijzen op basis van waarden die uit het document worden gelezen. Denk bijvoorbeeld aan het volgende XML-document:
<array count='1000000'>
<!-- malicious document provider didn't actually provide 1000000 array items -->
</array>
Het toewijzen van een matrix op basis van soley op basis van de veronderstelling dat een aantal elementen zal volgen, zou een mogelijke aanvalsvector zijn. De gebruiker van de lezer in dit geval moet in plaats daarvan het geheugen incrementeel toewijzen wanneer de elementen worden weergegeven.
XML-lezer biedt geen ondersteuning voor DTD. De gebruiker van de lezer hoeft zich geen zorgen te maken over DTD-verificatie.
De volgende callback wordt gebruikt met XML-lezers:
De volgende opsommingen worden gebruikt met XML-lezers:
De volgende functies worden gebruikt met XML-lezers:
- 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-
De volgende ingang wordt gebruikt met XML-lezers:
De volgende structuren worden gebruikt met XML-lezers:
- 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