Udostępnij za pośrednictwem


Zagadnienia dotyczące bezpieczeństwa danych XSLT

Język XSLT ma bogaty zestaw funkcji, które zapewniają dużą moc i elastyczność. Zawiera wiele funkcji, które, choć przydatne, mogą być również wykorzystywane przez źródła zewnętrzne. Aby bezpiecznie korzystać z XSLT, musisz zrozumieć typy problemów z zabezpieczeniami występujących podczas korzystania z XSLT oraz podstawowe strategie, które można zastosować, aby ograniczyć te zagrożenia.

Rozszerzenia XSLT

Dwa popularne rozszerzenia XSLT to skrypty arkusza stylów i obiekty rozszerzeń. Te rozszerzenia umożliwiają procesorowi XSLT wykonywanie kodu.

  • Obiekty rozszerzeń dodają możliwości programowania do przekształceń XSL.

  • Skrypty można osadzać w arkuszu stylów przy użyciu msxsl:script elementu rozszerzenia.

Obiekty rozszerzeń

Obiekty rozszerzenia są dodawane przy użyciu AddExtensionObject metody . Zestaw uprawnień FullTrust jest wymagany do obsługi obiektów rozszerzeń. Gwarantuje to, że podniesienie uprawnień nie nastąpi po wykonaniu kodu obiektu rozszerzenia. Próba wywołania AddExtensionObject metody bez uprawnień FullTrust powoduje zgłoszenie wyjątku zabezpieczeń.

Skrypty arkusza stylów

Skrypty można osadzać w arkuszu stylów przy użyciu msxsl:script elementu rozszerzenia. Obsługa skryptów to opcjonalna funkcja w XslCompiledTransform klasie, która jest domyślnie wyłączona. Skrypty można włączyć, ustawiając XsltSettings.EnableScript właściwość na true i przekazując XsltSettings obiekt do Load metody .

Uwaga

Bloki skryptów są obsługiwane tylko w programie .NET Framework. Nieone obsługiwane na platformie .NET Core lub .NET 5 lub nowszym.

Wytyczne

Włącz wykonywanie skryptów tylko wtedy, gdy arkusz stylów pochodzi z zaufanego źródła. Jeśli nie możesz zweryfikować źródła arkusza stylów lub jeśli arkusz stylów nie pochodzi z zaufanego źródła, przekaż null argument ustawień XSLT.

Zasoby zewnętrzne

Język XSLT ma takie funkcje jak xsl:import, xsl:includelub document() funkcja, w której procesor musi rozpoznawać odwołania do identyfikatora URI. Klasa służy do rozwiązywania XmlResolver problemów z zasobami zewnętrznymi. W następujących dwóch przypadkach może być konieczne rozwiązanie zasobów zewnętrznych:

  • Podczas kompilowania arkusza XmlResolver stylów element jest używany do xsl:import obsługi i xsl:include rozpoznawania.

  • Podczas wykonywania przekształcenia XmlResolver element jest używany do rozpoznawania document() funkcji.

    Uwaga

    Funkcja document() jest domyślnie wyłączona w XslCompiledTransform klasie . Tę funkcję można włączyć, ustawiając XsltSettings.EnableDocumentFunction właściwość na true i przekazując XsltSettings obiekt do Load metody .

Metody Load i Transform obejmują przeciążenia, które akceptują XmlResolver jako jeden z jego argumentów. Jeśli parametr XmlResolver nie zostanie określony, zostanie użyta wartość domyślna XmlUrlResolver bez poświadczeń.

Wytyczne

document() Włącz funkcję tylko wtedy, gdy arkusz stylów pochodzi z zaufanego źródła.

Na poniższej liście opisano, kiedy można określić XmlResolver obiekt:

  • Jeśli proces XSLT musi uzyskać dostęp do zasobu sieciowego wymagającego uwierzytelniania, możesz użyć elementu XmlResolver z wymaganymi poświadczeniami.

  • Jeśli chcesz ograniczyć zasoby, do których może uzyskać dostęp proces XSLT, możesz użyć elementu XmlSecureResolver z poprawnym zestawem uprawnień. XmlSecureResolver Użyj klasy , jeśli musisz otworzyć zasób, którego nie kontrolujesz lub który jest niezaufany.

  • Jeśli chcesz dostosować zachowanie, możesz zaimplementować własną XmlResolver klasę i użyć jej do rozwiązywania problemów z zasobami.

  • Jeśli chcesz mieć pewność, że nie masz dostępu do żadnych zasobów zewnętrznych, możesz określić null argument XmlResolver .

Zobacz też