Udostępnij za pośrednictwem


System.Xml Przestrzeń nazw

Zapewnia opartą na standardach obsługę przetwarzania kodu XML.

Klasy

Nazwa Opis
NameTable

Implementuje jednowątkowy XmlNameTableelement .

UniqueId

Unikatowy identyfikator zoptymalizowany pod kątem identyfikatorów GUID.

XmlAttribute

Reprezentuje atrybut. Prawidłowe i domyślne wartości atrybutu są definiowane w definicji typu dokumentu (DTD) lub schemacie.

XmlAttributeCollection

Reprezentuje kolekcję atrybutów, do których można uzyskać dostęp według nazwy lub indeksu.

XmlBinaryReaderSession

Umożliwia dynamiczne zarządzanie zoptymalizowanymi ciągami.

XmlBinaryWriterSession

Umożliwia używanie słownika dynamicznego do kompresowania typowych ciągów wyświetlanych w komunikacie i konserwacji stanu.

XmlCDataSection

Reprezentuje sekcję CDATA.

XmlCharacterData

Udostępnia metody manipulowania tekstem, które są używane przez kilka klas.

XmlComment

Reprezentuje zawartość komentarza XML.

XmlConvert

Koduje i dekoduje nazwy XML oraz udostępnia metody konwertowania między typami środowiska uruchomieniowego języka wspólnego i typami języka XML (XSD). Podczas konwertowania typów danych zwracane wartości są niezależne od ustawień regionalnych.

XmlDataDocument

Umożliwia przechowywanie, pobieranie i manipulowanie danymi ustrukturyzowanymi za pomocą relacyjnej DataSetmetody .

XmlDeclaration

Reprezentuje węzeł <deklaracji XML ?xml version='1.0'...?>.

XmlDictionary

Implementuje słownik używany do optymalizowania implementacji czytnika/zapisywania XML programu Windows Communication Foundation (WCF).

XmlDictionaryReader

abstract Klasa, z XmlReader którą pochodzi program Windows Communication Foundation (WCF) do serializacji i deserializacji.

XmlDictionaryReaderQuotas

Zawiera konfigurowalne wartości przydziału dla elementów XmlDictionaryReaders.

XmlDictionaryString

Reprezentuje wpis przechowywany w obiekcie XmlDictionary.

XmlDictionaryWriter

Reprezentuje abstrakcyjną klasę, z XmlWriter którą pochodzi program Windows Communication Foundation (WCF) do serializacji i deserializacji.

XmlDocument

Reprezentuje dokument XML. Tej klasy można użyć do ładowania, weryfikowania, edytowania, dodawania i umieszczania kodu XML w dokumencie.

XmlDocumentFragment

Reprezentuje lekki obiekt, który jest przydatny w przypadku operacji wstawiania drzewa.

XmlDocumentType

Reprezentuje deklarację typu dokumentu.

XmlDocumentXPathExtensions

Udostępnia metody rozszerzeń dla XmlDocument elementu i XmlNode na potrzeby nawigacji po dokumentach.

XmlElement

Reprezentuje element.

XmlEntity

Reprezentuje deklarację jednostki, taką jak <! JEDNOSTKA... >.

XmlEntityReference

Reprezentuje węzeł odwołania do jednostki.

XmlException

Zwraca szczegółowe informacje o ostatnim wyjątku.

XmlImplementation

Definiuje kontekst zestawu XmlDocument obiektów.

XmlLinkedNode

Pobiera węzeł bezpośrednio poprzedzający lub następujący po tym węźle.

XmlNamedNodeMap

Reprezentuje kolekcję węzłów, do których można uzyskać dostęp według nazwy lub indeksu.

XmlNamespaceManager

Rozpoznaje, dodaje i usuwa przestrzenie nazw do kolekcji i zapewnia zarządzanie zakresem dla tych przestrzeni nazw.

XmlNameTable

Tabela obiektów ciągów atomizowanego.

XmlNode

Reprezentuje jeden węzeł w dokumencie XML.

XmlNodeChangedEventArgs

Dostarcza dane dla zdarzeń NodeChanged, , NodeInsertedNodeChanging, NodeRemovedNodeInsertingi NodeRemoving .

XmlNodeList

Reprezentuje uporządkowaną kolekcję węzłów.

XmlNodeReader

Reprezentuje czytnik, który zapewnia szybki, niebuforowany dostęp tylko do danych XML w obiekcie XmlNode.

XmlNotation

Reprezentuje deklarację notacji, taką jak <! NOTACJA... >.

XmlParserContext

Udostępnia wszystkie informacje kontekstowe wymagane przez element XmlReader , aby przeanalizować fragment XML.

XmlProcessingInstruction

Reprezentuje instrukcję przetwarzania, którą kod XML definiuje, aby przechowywać informacje specyficzne dla procesora w tekście dokumentu.

XmlQualifiedName

Reprezentuje kwalifikowaną nazwę XML.

XmlReader

Reprezentuje czytnik, który zapewnia szybki, niecachedowany, tylko do przekazywania dostęp do danych XML.

XmlReaderSettings

Określa zestaw funkcji do obsługi obiektu XmlReader utworzonego przez metodę Create .

XmlResolver

Rozpoznaje zewnętrzne zasoby XML nazwane przez identyfikator URI (Uniform Resource Identifier).

XmlSecureResolver

Pomaga zabezpieczyć kolejną implementację XmlResolver przez opakowywanie XmlResolver obiektu i ograniczanie zasobów, do których bazowe XmlResolver ma dostęp.

XmlSignificantWhitespace

Reprezentuje białe znaki między znacznikami w mieszanym węźle zawartości lub białym znakiem w zakresie xml:space= "preserve". Jest to również nazywane znaczącym białym znakiem.

XmlText

Reprezentuje zawartość tekstową elementu lub atrybutu.

XmlTextReader

Reprezentuje czytnik, który zapewnia szybki, niebuforowany, tylko do przekazywania dostęp do danych XML.

Zalecamy zamiast tego użycie XmlReader klasy .

XmlTextWriter

Reprezentuje moduł zapisywania, który zapewnia szybki, niebuforowany, tylko do przodu sposób generowania strumieni lub plików zawierających dane XML, które są zgodne z językiem W3C Extensible Markup Language (XML) 1.0 i przestrzeniami nazw w zaleceniach XML.

Zalecamy zamiast tego użycie XmlWriter klasy .

XmlUrlResolver

Rozpoznaje zewnętrzne zasoby XML nazwane przez identyfikator URI (Uniform Resource Identifier).

XmlValidatingReader

Reprezentuje czytelnik, który udostępnia definicję typu dokumentu (DTD), schemat XML-Data zredukowany (XDR) i walidację języka definicji schematu XML (XSD).

Ta klasa jest przestarzała. Zalecamy użycie XmlReaderSettings klasy i Create metody w celu utworzenia modułu sprawdzania poprawności czytnika XML.

XmlWhitespace

Reprezentuje białe znaki w zawartości elementu.

XmlWriter

Reprezentuje moduł zapisywania, który zapewnia szybki, niebuforowany, tylko do przodu sposób generowania strumieni lub plików zawierających dane XML.

XmlWriterSettings

Określa zestaw funkcji do obsługi obiektu XmlWriter utworzonego przez metodę Create .

XmlXapResolver

Typ XmlXapResolver służy do rozpoznawania zasobów w pakiecie XAP aplikacji Silverlight.

Interfejsy

Nazwa Opis
IApplicationResourceStreamResolver

Reprezentuje program rozpoznawania strumienia zasobów aplikacji.

IFragmentCapableXmlDictionaryWriter

Zawiera właściwości i metody, które po zaimplementowaniu przez element XmlDictionaryWriterumożliwia przetwarzanie fragmentów XML.

IHasXmlNode

Umożliwia klasie zwracanie elementu XmlNode z bieżącego kontekstu lub położenia.

IStreamProvider

Reprezentuje interfejs, który można zaimplementować przez klasy dostarczające strumienie.

IXmlBinaryReaderInitializer

Udostępnia metody ponownego inicjowania czytnika binarnego w celu odczytania nowego dokumentu.

IXmlBinaryWriterInitializer

Określa wymagania implementacji dla składników binarnych XML, które pochodzą z tego interfejsu.

IXmlDictionary

Element interface definiujący kontrakt, który musi implementować słownik Xml, aby był używany przez XmlDictionaryReader implementacje i XmlDictionaryWriter .

IXmlLineInfo

Udostępnia interfejs umożliwiający klasę zwracania informacji o linii i pozycji.

IXmlMtomReaderInitializer

Określa wymagania implementacji dla czytników MTOM XML, które pochodzą z tego interfejsu.

IXmlMtomWriterInitializer

Po zaimplementowaniu przez moduł zapisywania MTOM ten interfejs zapewnia inicjowanie modułu zapisywania MTOM.

IXmlNamespaceResolver

Zapewnia dostęp tylko do odczytu do zestawu mapowań prefiksów i przestrzeni nazw.

IXmlTextReaderInitializer

Określa wymagania implementacji dla czytników tekstu XML, które pochodzą z tego interfejsu.

IXmlTextWriterInitializer

Określa wymagania implementacji dla składników zapisywania tekstu XML, które pochodzą z tego interfejsu.

Wyliczenia

Nazwa Opis
ConformanceLevel

Określa ilość danych wejściowych lub wyjściowych, które XmlReader i XmlWriter obiektów.

DtdProcessing

Określa opcje przetwarzania dtd. Wyliczenie DtdProcessing jest używane przez klasę XmlReaderSettings.

EntityHandling

Określa sposób obsługi jednostek XmlTextReader lub XmlValidatingReader.

Formatting

Określa opcje formatowania dla XmlTextWriter.

NamespaceHandling

Określa, czy usunąć zduplikowane deklaracje przestrzeni nazw w XmlWriter.

NewLineHandling

Określa sposób obsługi podziałów wierszy.

ReadState

Określa stan czytnika.

ValidationType

Określa typ weryfikacji do wykonania.

WhitespaceHandling

Określa sposób obsługi odstępu.

WriteState

Określa stan XmlWriter.

XmlDateTimeSerializationMode

Określa sposób traktowania wartości czasu podczas konwertowania między ciągiem a DateTime.

XmlDictionaryReaderQuotaTypes

Wylicza konfigurowalne wartości przydziału dla elementów XmlDictionaryReaders.

XmlNamespaceScope

Definiuje zakres przestrzeni nazw.

XmlNodeChangedAction

Określa typ zmiany węzła.

XmlNodeOrder

Opisuje kolejność dokumentów węzła w porównaniu z drugim węzłem.

XmlNodeType

Określa typ węzła.

XmlOutputMethod

Określa metodę używaną do serializacji danych wyjściowych XmlWriter.

XmlSpace

Określa bieżący zakres xml:space.

XmlTokenizedType

Reprezentuje typ XML ciągu. Dzięki temu ciąg może być odczytywany jako określony typ XML, na przykład typ sekcji CDATA.

Delegaci

Nazwa Opis
OnXmlDictionaryReaderClose

delegate dla metody wywołania zwrotnego podczas zamykania czytnika.

XmlNodeChangedEventHandler

Reprezentuje metodę, która obsługuje NodeChangedzdarzenia , NodeChanging, NodeInserted, NodeRemovedNodeInsertingi NodeRemoving .

Uwagi

Obsługiwane standardy

System.Xml Przestrzeń nazw obsługuje następujące standardy:

Zobacz sekcję Różnice w specyfikacji W3C dla dwóch przypadków, w których klasy XML różnią się od zaleceń W3C.

Asynchroniczne przetwarzanie kodu XML

Klasy System.Xml.XmlReader i System.Xml.XmlWriter obejmują szereg metod asynchronicznych opartych na modelu programowania asynchronicznego. Te metody można zidentyfikować za pomocą ciągu "Async" na końcu ich nazw. Za pomocą tych metod można napisać kod asynchroniczny podobny do kodu synchronicznego, a istniejący kod synchroniczny można łatwo migrować do kodu asynchronicznego.

  • Użyj metod asynchronicznych w aplikacjach, w których występuje znaczne opóźnienie strumienia sieciowego. Unikaj używania asynchronicznych interfejsów API dla strumienia pamięci lub lokalnych operacji odczytu/zapisu strumienia plików. Strumień wejściowy , XmlTextReaderi XmlTextWriter powinien również obsługiwać operacje asynchroniczne. W przeciwnym razie wątki będą nadal blokowane przez operacje we/wy.

  • Nie zalecamy mieszania wywołań funkcji synchronicznych i asynchronicznych, ponieważ możesz zapomnieć o użyciu await słowa kluczowego lub użyć synchronicznego interfejsu API, w którym jest to konieczne.

  • Nie ustawiaj flagi XmlReaderSettings.Async lub XmlWriterSettings.Async na true , jeśli nie zamierzasz używać metody asynchronicznej.

  • Jeśli zapomnisz określić await słowo kluczowe podczas wywoływania metody asynchronicznej, wyniki są niedeterministyczne: Możesz otrzymać oczekiwany wynik lub wyjątek.

  • XmlReader Gdy obiekt odczytuje duży węzeł tekstowy, może buforować tylko częściową wartość tekstową i zwrócić węzeł tekstowy, więc pobieranie XmlReader.Value właściwości może zostać zablokowane przez operację we/wy. XmlReader.GetValueAsync Użyj metody , aby uzyskać wartość tekstową w trybie asynchronicznym, lub użyj XmlReader.ReadValueChunkAsync metody , aby odczytać duży blok tekstu we fragmentach.

  • W przypadku używania obiektu wywołaj metodę XmlWriterXmlWriter.FlushAsync przed wywołaniem XmlWriter.Close metody , aby uniknąć blokowania operacji we/wy.

Różnice w specyfikacji W3C

W dwóch przypadkach, które obejmują ograniczenia dotyczące składników schematu grupy modeli, System.Xml przestrzeń nazw różni się od zaleceń W3C.

Spójność w deklaracjach elementów:

W niektórych przypadkach, gdy są używane grupy podstawiania, implementacja nie spełnia wymagań "Ograniczenie składnika schematu: Deklaracje elementów spójne", System.Xml które opisano w sekcji Ograniczenia składników schematu grupy modeli specyfikacji W3C.

Na przykład poniższy schemat zawiera elementy o tej samej nazwie, ale różne typy w tym samym modelu zawartości, a używane są grupy podstawiania. Powinno to spowodować błąd, ale System.Xml kompiluje i weryfikuje schemat bez błędów.

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

   <xs:element name="e1" type="t1"/>
   <xs:complexType name="t1"/>

   <xs:element name="e2" type="t2" substitutionGroup="e1"/>
      <xs:complexType name="t2">
         <xs:complexContent>
            <xs:extension base="t1">
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

   <xs:complexType name="t3">
      <xs:sequence>
         <xs:element ref="e1"/>
         <xs:element name="e2" type="xs:int"/>
      </xs:sequence>
   </xs:complexType>
</xs:schema>

W tym schemacie typ t3 zawiera sekwencję elementów. Ze względu na podstawienie odwołanie do elementu e1 z sekwencji może spowodować element typu t1 lub w elemencie e1e2 typu t2. Ten ostatni przypadek spowodowałoby sekwencję dwóch e2 elementów, gdzie jeden jest typu t2 , a drugi jest typu xs:int.

Unikatowe przypisywanie cząstek:

W następujących warunkach implementacja System.Xml nie spełnia wymagań "Ograniczenie składnika schematu: unikatowe przypisanie cząstek", które opisano w sekcji Ograniczenia dotyczące składników schematu grupy modeli specyfikacji W3C.

  • Jeden z elementów w grupie odwołuje się do innego elementu.
  • Odwoływający się element jest elementem głównym grupy podstawiania.
  • Grupa podstawienia zawiera element o takiej samej nazwie jak jeden z elementów w grupie.
  • Kardynalność elementu odwołującego się do elementu głównego grupy podstawień i elementu o takiej samej nazwie jak element grupy podstawienia nie jest stały (minOccurs maxOccurs < ).
  • Definicja elementu odwołującego się do grupy podstawiania poprzedza definicję elementu o takiej samej nazwie jak element grupy podstawień.

Na przykład w schemacie poniżej modelu zawartości jest niejednoznaczny i powinien powodować błąd kompilacji, ale System.Xml kompiluje schemat bez błędów.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <xs:element name="e1" type="xs:int"/>
  <xs:element name="e2" type="xs:int" substitutionGroup="e1"/>

  <xs:complexType name="t3">
    <xs:sequence>
      <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
      <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="e3" type="t3"/>
</xs:schema>

Jeśli spróbujesz zweryfikować następujący kod XML względem powyższego schematu, weryfikacja zakończy się niepowodzeniem z następującym komunikatem: "Element "e3" ma nieprawidłowy element podrzędny "e2", a XmlSchemaValidationException wyjątek zostanie zgłoszony.

<e3>
  <e2>1</e2>
  <e2>2</e2>
</e3>

Aby obejść ten problem, możesz zamienić deklaracje elementów w dokumencie XSD. Przykład:

<xs:sequence>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

staje się następująca:

<xs:sequence>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

Oto inny przykład tego samego problemu:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
   <xs:element name="e1" type="xs:string"/>
   <xs:element name="e2" type="xs:string" substitutionGroup="e1"/>

   <xs:complexType name="t3">
      <xs:sequence>
         <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
         <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
   </xs:complexType>
   <xs:element name="e3" type="t3"/>
</xs:schema>

Jeśli spróbujesz zweryfikować następujący kod XML względem powyższego schematu, weryfikacja zakończy się niepowodzeniem z powodu następującego wyjątku: "Nieobsługiwany wyjątek: System.Xml.Schema.XmlSchemaValidationException: element el "e2" jest nieprawidłowy — wartość "abc" jest nieprawidłowa zgodnie z jego typem 'http://www.w3.org/2001/XMLSchema:int' danych — ciąg "abc" nie jest prawidłową wartością Int32.

<e3><e2>abc</e2></e3>

Zagadnienia dotyczące zabezpieczeń

Typy i elementy członkowskie w System.Xml przestrzeni nazw opierają się na systemie zabezpieczeń platformy .NET. W poniższych sekcjach omówiono problemy z zabezpieczeniami specyficzne dla technologii XML.

Należy również pamiętać, że jeśli używasz System.Xml typów i elementów członkowskich, jeśli kod XML zawiera dane, które mają potencjalne konsekwencje dla prywatności, musisz zaimplementować aplikację w sposób, który szanuje prywatność użytkowników końcowych.

Dostęp zewnętrzny

Kilka technologii XML umożliwia pobieranie innych dokumentów podczas przetwarzania. Na przykład definicja typu dokumentu (DTD) może znajdować się w analizowanym dokumencie. DtD może również znajdować się w zewnętrznym dokumencie, do którego odwołuje się analizowany dokument. Technologie definicji schematu XML (XSD) i XSLT mają również możliwość dołączania informacji z innych plików. Te zasoby zewnętrzne mogą stanowić pewne obawy dotyczące zabezpieczeń. Na przykład należy upewnić się, że aplikacja pobiera pliki tylko z zaufanych witryn, a pobrany plik nie zawiera złośliwych danych.

Klasa XmlUrlResolver służy do ładowania dokumentów XML i rozpoznawania zasobów zewnętrznych, takich jak jednostki, DTD lub schematy, oraz importowanie lub dołączanie dyrektyw.

Możesz zastąpić tę klasę i określić XmlResolver obiekt do użycia. XmlSecureResolver Użyj klasy , jeśli musisz otworzyć zasób, którego nie kontrolujesz lub który jest niezaufany. Zawija XmlSecureResolver element XmlResolver i umożliwia ograniczenie zasobów, do których podstawowy XmlResolver ma dostęp.

Odmowa usługi

Poniższe scenariusze są uważane za mniej podatne na ataki typu "odmowa usługi", ponieważ System.Xml klasy zapewniają ochronę przed takimi atakami.

  • Analizowanie danych XML tekstu.

  • Analizowanie danych binarnych XML, jeśli dane binarne XML zostały wygenerowane przez program Microsoft SQL Server.

  • Zapisywanie dokumentów XML i fragmentów ze źródeł danych w systemie plików, strumieniach, elementach TextWriterlub StringBuilder.

  • Ładowanie dokumentów do obiektu Modelu obiektów dokumentów (DOM), jeśli używasz XmlReader obiektu i XmlReaderSettings.DtdProcessing ustawiono wartość DtdProcessing.Prohibit.

  • Nawigowanie po obiekcie DOM.

Poniższe scenariusze nie są zalecane, jeśli martwisz się o ataki typu "odmowa usługi" lub jeśli pracujesz w niezaufanym środowisku.

  • Przetwarzanie DTD.

  • Przetwarzanie schematu. Obejmuje to dodawanie niezaufanego schematu do kolekcji schematów, kompilowanie niezaufanego schematu i weryfikowanie przy użyciu niezaufanego schematu.

  • Przetwarzanie XSLT.

  • Analizowanie dowolnego strumienia danych binarnych XML dostarczonych przez użytkownika.

  • Operacje DOM, takie jak wykonywanie zapytań, edytowanie, przenoszenie pod drzew między dokumentami i zapisywanie obiektów DOM.

Jeśli martwisz się o problemy z odmową usługi lub jeśli masz do czynienia z niezaufanymi źródłami, nie włączaj przetwarzania DTD. Jest to domyślnie wyłączone w XmlReader obiektach tworzonych przez metodę XmlReader.Create .

Uwaga / Notatka

Ustawienie XmlTextReader zezwala na domyślne przetwarzanie DTD. XmlTextReader.DtdProcessing Użyj właściwości , aby wyłączyć tę funkcję.

Jeśli masz włączone przetwarzanie DTD, możesz użyć XmlSecureResolver klasy , aby ograniczyć zasoby, do których XmlReader można uzyskać dostęp. Możesz również zaprojektować aplikację tak, aby przetwarzanie XML było ograniczone pod względem pamięci i czasu. Możesz na przykład skonfigurować limity czasu w aplikacji ASP.NET.

Zagadnienia dotyczące przetwarzania

Ponieważ dokumenty XML mogą zawierać odwołania do innych plików, trudno jest określić, ile mocy obliczeniowej jest wymagane do analizowania dokumentu XML. Na przykład dokumenty XML mogą zawierać dtD. Jeśli dtD zawiera zagnieżdżone jednostki lub złożone modele zawartości, analizowanie dokumentu może zająć zbyt dużo czasu.

W przypadku korzystania z programu XmlReadermożna ograniczyć rozmiar dokumentu, który można przeanalizować, ustawiając XmlReaderSettings.MaxCharactersInDocument właściwość . Możesz ograniczyć liczbę znaków, które wynikają z rozszerzania XmlReaderSettings.MaxCharactersFromEntities jednostek, ustawiając właściwość . Zapoznaj się z odpowiednimi tematami referencyjnymi, aby zapoznać się z przykładami ustawiania tych właściwości.

Technologie XSD i XSLT mają dodatkowe możliwości, które mogą mieć wpływ na wydajność przetwarzania. Na przykład można utworzyć schemat XML, który wymaga znacznego czasu na przetworzenie w przypadku oceny stosunkowo małego dokumentu. Istnieje również możliwość osadzania bloków skryptów w arkuszu stylów XSLT. Oba przypadki stanowią potencjalne zagrożenie bezpieczeństwa aplikacji.

Podczas tworzenia aplikacji korzystającej XslCompiledTransform z klasy należy pamiętać o następujących elementach i ich implikacjach:

  • Skrypty XSLT są domyślnie wyłączone. Skrypty XSLT powinny być włączone tylko wtedy, gdy potrzebujesz obsługi skryptów i pracujesz w w pełni zaufanym środowisku.

  • Funkcja XSLT document() jest domyślnie wyłączona. Jeśli włączysz document() funkcję, ogranicz zasoby, do których można uzyskać dostęp, przekazując XmlSecureResolver obiekt do XslCompiledTransform.Transform metody .

  • Obiekty rozszerzenia są domyślnie włączone. XsltArgumentList Jeśli obiekt zawierający obiekty rozszerzenia jest przekazywany do XslCompiledTransform.Transform metody, używane są obiekty rozszerzenia.

  • Arkusze stylów XSLT mogą zawierać odwołania do innych plików i bloków skryptów osadzonych. Złośliwy użytkownik może wykorzystać ten problem, dostarczając dane lub arkusze stylów, które po wykonaniu mogą spowodować przetworzenie systemu do momentu, gdy komputer nie będzie działać nisko na zasobach.

  • Aplikacje XSLT uruchamiane w środowisku mieszanego zaufania mogą powodować fałszowanie arkuszy stylów. Na przykład złośliwy użytkownik może załadować obiekt ze szkodliwym arkuszem stylów i przekazać go innemu użytkownikowi, który następnie wywołuje XslCompiledTransform.Transform metodę i wykonuje przekształcenie.

Te problemy z zabezpieczeniami można rozwiązać, nie włączając skryptów ani document() funkcji, chyba że arkusz stylów pochodzi z zaufanego źródła i nie akceptuje XslCompiledTransform obiektów, arkuszy stylów XSLT lub danych źródłowych XML z niezaufanego źródła.

Obsługa wyjątków

Wyjątki zgłaszane przez składniki niższego poziomu mogą ujawniać informacje o ścieżkach, które nie mają być widoczne dla aplikacji. Aplikacje muszą przechwytywać wyjątki i odpowiednio je przetwarzać.

Zobacz też