Pembaca XML
Pembaca XML adalah kursor di atas sumber input XML. Pada intinya, Pembaca XML membaca satu Simpul XML pada satu waktu, tetapi ada API pembantu tambahan untuk membuat membaca urutan simpul lebih mudah.
Jenis input pembaca berikut didukung:
Pembaca akan memverifikasi bahwa atribut yang ada pada elemen unik. Waktu yang diperlukan untuk melakukan validasi ini adalah fungsi dari jumlah atribut pada elemen yang dapat sebesar WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Oleh karena itu, memproses dokumen besar ketika WS_XML_READER_PROPERTY_MAX_ATTRIBUTES diatur ke nilai besar dapat memberikan kesempatan untuk penolakan serangan layanan.
Pembaca akan memetakan awalan ke namespace untuk setiap elemen dan atribut. Waktu yang diperlukan untuk melakukan pemetaan ini adalah fungsi dari jumlah atribut xmln dalam cakupan yang mungkin sebesar WS_XML_READER_PROPERTY_MAX_NAMESPACES. Oleh karena itu, memproses dokumen besar ketika properti ini diatur ke nilai besar dapat memberikan kesempatan untuk penolakan serangan layanan.
Meskipun pembaca akan memastikan bahwa dokumen mengikuti spesifikasi tata bahasa xml dan selain itu bahwa aspeknya berada dalam kuota yang ditentukan, konten dokumen masih harus dianggap tidak tepercaya saat berasal dari sumber yang tidak tepercaya. Pengguna pembaca harus memeriksa semua elemen dan nama atribut dan namespace layanan menggunakan WsReadToStartElement, WsFindAttribute, atau dengan memeriksa simpul secara manual.
Beberapa situasi lain yang perlu dipertimbangkan termasuk, tetapi tidak terbatas pada:
- Elemen yang diharapkan mungkin hilang
- Elemen tak terduga mungkin muncul
- Atribut yang diharapkan mungkin hilang
- Atribut tak terduga mungkin muncul
- Elemen mungkin muncul sebagai elemen kosong
- Spasi kosong mungkin muncul di tempat yang tidak terduga
Pengguna pembaca tidak boleh mengalokasikan memori hanya berdasarkan nilai yang dibaca dari dokumen. Misalnya, pertimbangkan dokumen xml berikut:
<array count='1000000'>
<!-- malicious document provider didn't actually provide 1000000 array items -->
</array>
Mengalokasikan array berdasarkan soley pada asumsi bahwa beberapa elemen akan mengikuti akan menjadi vektor serangan potensial. Pengguna pembaca dalam hal ini harus secara bertahap mengalokasikan memori saat elemen muncul.
Pembaca XML tidak mendukung DTD. Pengguna pembaca tidak perlu khawatir tentang verifikasi DTD.
Panggilan balik berikut digunakan dengan pembaca XML:
Enumerasi berikut digunakan dengan pembaca XML:
Fungsi berikut digunakan dengan pembaca 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
Handel berikut digunakan dengan pembaca XML:
Struktur berikut digunakan dengan pembaca 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