Čtečka XML
Čtečka XML je kurzorem na vstupní zdroj XML. V jádru čte čtečka XML jeden uzel XML současně, ale existují další pomocná rozhraní API, která usnadňují čtení posloupnosti uzlů.
Podporují se následující typy vstupů čtenářů:
Bezpečnost
Čtenář ověří, že atributy, které jsou přítomné na elementu, jsou jedinečné. Doba potřebná k provedení tohoto ověření je funkce počtu atributů prvku, který může být tak velký jako WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Zpracování velkých dokumentů při nastavení WS_XML_READER_PROPERTY_MAX_ATTRIBUTES na velkou hodnotu proto může představovat příležitost pro útok na dostupnost služby.
Čtenář namapuje předpony na obory názvů pro každý prvek a atributy. Doba potřebná k provedení tohoto mapování je funkce počtu atributů xmln v oboru, které mohou být tak velké jako WS_XML_READER_PROPERTY_MAX_NAMESPACES. Zpracování velkých dokumentů při nastavení této vlastnosti na velkou hodnotu proto může představovat příležitost pro útok na dostupnost služby.
I když čtenář zajistí, že dokument dodržuje gramatickou specifikaci xml a navíc, že jeho aspekty jsou v rámci zadaných kvót, musí být obsah dokumentu při příchodu z nedůvěryhodného zdroje stále považován za nedůvěryhodný. Uživatelé čtečky by měli zkontrolovat všechny názvy prvků a atributů a obory názvů pomocí WsReadToStartElement, WsFindAttributenebo ruční kontrolou uzlů .
Mezi další situace, které je potřeba vzít v úvahu, patří mimo jiné:
- Pravděpodobně chybí očekávané elementy.
- Můžou se objevit neočekávané prvky.
- Můžou chybět očekávané atributy
- Můžou se objevit neočekávané atributy.
- Prvky se můžou zobrazit jako prázdné prvky.
- Prázdné znaky se můžou objevit na neočekávaných místech
Uživatelé čtenáře by neměli přidělovat paměť jednoduše na základě hodnot načtených z dokumentu. Představte si například následující dokument XML:
<array count='1000000'>
<!-- malicious document provider didn't actually provide 1000000 array items -->
</array>
Přidělení pole založené pouze na předpokladu, že určitý počet prvků bude následovat, by byl potenciální vektor útoku. Uživatel čtečky by v tomto případě měl místo toho přidělovat paměť postupně, jak se zobrazují prvky.
Čtečka XML nepodporuje DTD. Uživatel čtenáře se nemusí zabývat ověřováním DTD.
U čteček XML se používá následující zpětné volání:
Následující výčty se používají se čtečkami XML:
U čteček XML se používají následující funkce:
- 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
Následující popisovač se používá se čtečkami XML:
U čteček XML se používají následující struktury:
- 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