XML 讀取器

XML 讀取器是 XML 輸入來源上的游標。 XML 讀取器一次讀取一個 XML 節點 ,但還有額外的協助程式 API,讓讀取一連串的節點更容易。

支援下列類型的讀取器輸入:

安全性

讀取器會確認元素上存在的屬性是唯一的。 執行此驗證所需的時間是元素上屬性數目的函式,其大小可WS_XML_READER_PROPERTY_MAX_ATTRIBUTES。 因此,當 WS_XML_READER_PROPERTY_MAX_ATTRIBUTES 設定為大數值時,處理大型檔可能會造成拒絕服務攻擊的機會。

讀取器會將前置詞對應至每個元素和屬性的命名空間。 執行此對應所需的時間是範圍中 xmlns 屬性數目的函式,其範圍可能比 WS_XML_READER_PROPERTY_MAX_NAMESPACES大。 因此,當此屬性設定為大型值時,處理大型檔可能會造成拒絕服務攻擊的機會。

雖然讀者會確保檔遵循 xml 的文法規格,而且其層面也位於指定的配額內,但是當來自不受信任的來源時,檔的內容仍必須被視為不受信任。 讀取器的使用者應該使用 WsReadToStartElementWsFindAttribute或手動檢查 節點來檢查所有元素和屬性名稱和命名空間。

需要考慮的一些其他情況包括,但不限於:

  • 預期的元素可能遺失
  • 可能會顯示非預期的元素
  • 預期的屬性可能遺失
  • 可能會顯示非預期的屬性
  • 元素可能會顯示為空白元素
  • 空白字元可能會出現在非預期的位置

讀取器的使用者不應該只根據從檔讀取的值來配置記憶體。 例如,請考慮下列 xml 檔:

<array count='1000000'>
   <!-- malicious document provider didn't actually provide 1000000 array items -->
</array>

根據假設會遵循某些元素數目的假設,配置陣列是潛在的攻擊媒介。 在此情況下,讀取器的使用者應該改為以累加方式配置記憶體,因為元素出現。

XML 讀取器不支援 DTD。 讀取器的使用者不需要擔心 DTD 驗證。

下列回呼會與 XML 讀取器搭配使用:

下列列舉會與 XML 讀取器搭配使用:

下列函式會與 XML 讀取器搭配使用:

下列控制碼會與 XML 讀取器搭配使用:

下列結構會與 XML 讀取器搭配使用: