Udostępnij za pośrednictwem


System.Xml Przestrzeń nazw

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

Klasy

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ą określane 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 ciągami zoptymalizowanymi.

XmlBinaryWriterSession

Umożliwia używanie słownika dynamicznego do kompresowania typowych ciągów wyświetlanych w komunikacie i utrzymania 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 i typami języka definicji schematu 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 czytania/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 elementu 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. Ta klasa umożliwia ładowanie, weryfikowanie, edytowanie, dodawanie i pozycjonowanie 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 rozszerzenia dla XmlDocument elementów 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 ten węzeł 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 oraz 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 w celu zachowania informacji specyficznych dla procesora w tekście dokumentu.

XmlQualifiedName

Reprezentuje kwalifikowaną nazwę XML.

XmlReader

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

XmlReaderSettings

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

XmlResolver

Rozpoznaje zewnętrzne zasoby XML określane przez identyfikator URI (Uniform Resource Identifier).

XmlSecureResolver

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

XmlSignificantWhitespace

Reprezentuje białe znaki między znacznikami w węźle zawartości mieszanej lub biały znak w zakresie xml:space= 'preserve'. Jest to również nazywane istotnym białym znakiem.

XmlText

Reprezentuje zawartość tekstową elementu lub atrybutu.

XmlTextReader

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

Począwszy od .NET Framework 2.0, zalecamy 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 zgodne z językiem W3C Extensible Markup Language (XML) 1.0 i przestrzeniami nazw w zaleceniach XML.

Począwszy od .NET Framework 2.0, zalecamy użycie XmlWriter klasy .

XmlUrlResolver

Rozpoznaje zewnętrzne zasoby XML określane przez identyfikator URI (Uniform Resource Identifier).

XmlValidatingReader

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

Ta klasa jest przestarzała. Począwszy od .NET Framework 2.0, zalecamy użycie XmlReaderSettings klasy i Create metody do utworzenia modułu sprawdzania poprawności czytnika XML.

XmlWhitespace

Biały znak 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 dla XmlWriter obiektu utworzonego przez metodę Create .

XmlXapResolver

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

Interfejsy

IApplicationResourceStreamResolver

Reprezentuje program rozpoznawania strumienia zasobów aplikacji.

IFragmentCapableXmlDictionaryWriter

Zawiera właściwości i metody, które po zaimplementowaniu przez element XmlDictionaryWriterumożliwiają 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 zapisywania danych 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 klasom zwracanie informacji o linii i położeniu.

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

ConformanceLevel

Określa ilość danych wejściowych lub wyjściowych sprawdzania, czy XmlReader i XmlWriter obiekty są wykonywane.

DtdProcessing

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

EntityHandling

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

Formatting

Określa opcje formatowania dla .XmlTextWriter

NamespaceHandling

Określa, czy usunąć zduplikowane deklaracje przestrzeni nazw w obiekcie 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ść dokumentu 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 xml:space zakres.

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

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.

Platforma .NET udostępnia również inne przestrzenie nazw dla operacji związanych z xml. Aby uzyskać listę, opisy i linki, zobacz System.Xml Przestrzenie nazw.

Asynchroniczne przetwarzanie kodu XML

Klasy System.Xml.XmlReader i System.Xml.XmlWriter obejmują szereg metod asynchronicznych opartych na modelu programowania asynchronicznego. Metody te 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 sieci. 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 synchronicznych i asynchronicznych wywołań funkcji, ponieważ można zapomnieć o użyciu słowa kluczowego lub użyć synchronicznego interfejsu await API, w którym jest to konieczne asynchroniczne.

  • Nie ustawiaj flagi XmlReaderSettings.Asynctrue lub XmlWriterSettings.Async na , 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 zwracać 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 pobrać wartość tekstową w trybie asynchronicznym lub użyć XmlReader.ReadValueChunkAsync metody , aby odczytać duży blok tekstowy we fragmentach.

  • W przypadku używania XmlWriter obiektu wywołaj metodę XmlWriter.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 podstawień, System.Xml implementacja nie spełnia wymagań "Ograniczenie składnika schematu: deklaracje elementów spójne", który jest opisany 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 podstawień. 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 podstawianie odwołanie do elementu e1 z sekwencji może spowodować element e1 typu t1 lub w elemencie e2 typu t2. Ten ostatni przypadek byłby wynikiem sekwencji 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, który ma taką samą nazwę jak jeden z elementów w grupie.

  • Kardynalność elementu odwołującego się do elementu head grupy podstawień i elementu o takiej samej nazwie jak element grupy podstawień nie jest stały (minOccurs maxOccurs < ).

  • Definicja elementu odwołującego się do grupy podstawienia poprzedza definicję elementu o tej samej nazwie co element grupy podstawienia.

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 bezpieczeństwa

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 problemy z zabezpieczeniami. Na przykład należy upewnić się, że aplikacja pobiera pliki tylko z zaufanych witryn, a pobierany 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. Obiekt XmlSecureResolver opakowuje XmlResolver element i umożliwia ograniczenie zasobów, do których podstawowy XmlResolver obiekt ma dostęp.

Denial of service (odmowa usługi)

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

  • Analizowanie danych XML tekstu.

  • Analizowanie binarnych danych XML, jeśli dane binarne XML zostały wygenerowane przez firmę 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 Document Object Model (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 obawiasz się odmowy 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 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 dla XmlReader obiektów tworzonych przez metodę XmlReader.Create .

Uwaga

Domyślnie XmlTextReader zezwala na przetwarzanie DTD. Użyj właściwości , XmlTextReader.DtdProcessing 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 ma dostęp. Możesz również zaprojektować aplikację, aby przetwarzanie XML było ograniczone pamięci i czasu. Na przykład możesz 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 jednostek, ustawiając XmlReaderSettings.MaxCharactersFromEntities 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 istnieje możliwość skonstruowania schematu XML, który wymaga znacznego czasu na przetworzenie w przypadku oceny na stosunkowo małym dokumencie. 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:

  • Wykonywanie skryptów XSLT jest 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 rozszerzeń 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 osadzonych bloków skryptów. Złośliwy użytkownik może wykorzystać ten problem, podając dane lub arkusze stylów, które po wykonaniu mogą spowodować przetworzenie systemu, dopóki komputer nie będzie działać nisko na zasobach.

  • Aplikacje XSLT uruchamiane w środowisku zaufania mieszanego 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 do innego użytkownika, który następnie wywołuje XslCompiledTransform.Transform metodę i wykonuje transformację.

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żce, które nie mają być widoczne dla aplikacji. Aplikacje muszą przechwytywać wyjątki i przetwarzać je odpowiednio.

Zobacz też