Dela via


XML-läsare

XML-läsare är en markör över en indatakälla för XML. I grunden läser en XML-läsare en XML-nod i taget, men det finns ytterligare hjälp-API:er för att göra det enklare att läsa en sekvens med noder.

Följande typer av läsare stöds:

Säkerhet

Läsaren kontrollerar att attributen som finns på ett element är unika. Den tid som krävs för att utföra den här valideringen är en funktion av antalet attribut på elementet som kan vara så stort som WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Därför kan bearbetning av stora dokument när WS_XML_READER_PROPERTY_MAX_ATTRIBUTES anges till ett stort värde innebära en möjlighet till överbelastningsattacker.

Läsaren mappar prefix till namnområden för varje element och attribut. Den tid som krävs för att utföra den här mappningen är en funktion av antalet xmlns-attribut i omfånget som kan vara så stort som WS_XML_READER_PROPERTY_MAX_NAMESPACES. Därför kan bearbetning av stora dokument när den här egenskapen är inställd på ett stort värde innebära en möjlighet till överbelastningsattacker.

Läsaren ser till att dokumentet följer den grammatiska specifikationen av xml och dessutom att dess aspekter ligger inom de angivna kvoterna, men innehållet i dokumentet måste fortfarande betraktas som obetrott när det kommer från en ej betrodd källa. Läsarens användare bör kontrollera alla element- och attributnamn och namnområden med hjälp av WsReadToStartElement, WsFindAttributeeller genom att manuellt granska noder.

Några andra situationer att överväga inkluderar, men är inte begränsade till:

  • Förväntade element kanske saknas
  • Oväntade element kan visas
  • Förväntade attribut kan saknas
  • Oväntade attribut kan visas
  • Element kan visas som tomma element
  • Tomt utrymme kan visas på oväntade platser

Läsarens användare bör inte allokera minne baserat på värden som lästs från dokumentet. Tänk till exempel på följande XML-dokument:

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

Att allokera en matrisbaserad soley utifrån antagandet att ett antal element kommer att följa skulle vara en potentiell attackvektor. Läsarens användare i det här fallet bör i stället stegvis allokera minnet när elementen visas.

XML-läsare stöder inte DTD. Läsarens användare behöver inte bekymra sig om DTD-verifiering.

Följande återanrop används med XML-läsare:

Följande uppräkningar används med XML-läsare:

Följande funktioner används med XML-läsare:

Följande handtag används med XML-läsare:

Följande strukturer används med XML-läsare: