Bagikan melalui


Pertimbangan Keamanan XSLT

Bahasa XSLT memiliki serangkaian fitur kaya yang memberi Anda banyak kekuatan dan fleksibilitas. Ini mencakup banyak fitur yang, meskipun berguna, juga dapat dieksploitasi oleh sumber luar. Untuk menggunakan XSLT dengan aman, Anda harus memahami jenis masalah keamanan yang muncul saat menggunakan XSLT, dan strategi dasar yang dapat Anda gunakan untuk mengurangi risiko ini.

Ekstensi XSLT

Dua ekstensi XSLT yang populer adalah skrip lembar gaya dan objek ekstensi. Ekstensi ini memungkinkan prosesor XSLT untuk menjalankan kode.

  • Objek ekstensi menambahkan kemampuan pemrograman ke transformasi XSL.

  • Skrip dapat disematkan dalam lembar gaya menggunakan elemen ekstensi msxsl:script.

Objek Ekstensi

Objek ekstensi ditambahkan menggunakan metode AddExtensionObject. Set izin FullTrust diperlukan untuk mendukung objek ekstensi. Ini memastikan bahwa elevasi izin tidak terjadi ketika kode objek ekstensi dijalankan. Mencoba memanggil metode AddExtensionObject tanpa izin FullTrust menghasilkan pengecualian keamanan yang dilemparkan.

Skrip Lembar Gaya

Skrip dapat disematkan dalam lembar gaya menggunakan elemen ekstensi msxsl:script. Dukungan skrip adalah fitur opsional pada kelas XslCompiledTransform yang dinonaktifkan secara default. Skrip dapat diaktifkan dengan menyetel properti XsltSettings.EnableScript ke true dan meneruskan objek XsltSettings ke metode Load.

Catatan

Blok skrip hanya didukung dalam .NET Framework. Blok skrip tidak didukung di .NET Core atau .NET 5 atau yang lebih baru.

Panduan

Aktifkan pembuatan skrip hanya ketika lembar gaya berasal dari sumber tepercaya. Jika Anda tidak dapat memverifikasi sumber lembar gaya, atau jika lembar gaya tidak berasal dari sumber tepercaya, teruskan null untuk argumen pengaturan XSLT.

Sumber Daya Eksternal

Bahasa XSLT memiliki fitur seperti fungsi xsl:import, xsl:include, atau document(), di mana prosesor perlu menyelesaikan referensi URI. Kelas XmlResolver digunakan untuk mengatasi sumber daya eksternal. Sumber daya eksternal mungkin perlu diselesaikan dalam dua kasus berikut:

Metode Load dan Transform masing-masing menyertakan overload yang menerima XmlResolver sebagai salah satu argumennya. Jika XmlResolver tidak ditentukan, XmlUrlResolver default tanpa kredensial akan digunakan.

Panduan

Aktifkan fungsi document() hanya jika lembar gaya berasal dari sumber tepercaya.

Daftar berikut ini menjelaskan kapan Anda mungkin ingin menentukan objek XmlResolver:

  • Jika proses XSLT perlu mengakses sumber daya jaringan yang memerlukan autentikasi, Anda dapat menggunakan XmlResolver dengan kredensial yang diperlukan.

  • Jika ingin membatasi sumber daya yang dapat diakses oleh proses XSLT, Anda dapat menggunakan XmlSecureResolver dengan rangkaian izin yang benar. Gunakan kelas XmlSecureResolver jika Anda perlu membuka sumber daya yang tidak Anda kontrol, atau yang tidak tepercaya.

  • Jika ingin menyesuaikan perilaku, Anda dapat menerapkan kelas XmlResolver milik Anda sendiri dan menggunakannya untuk mengatasi sumber daya.

  • Jika Anda ingin memastikan bahwa tidak ada sumber daya eksternal yang diakses, Anda dapat menentukan null untuk argumen XmlResolver.

Lihat juga