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:
Saat mengompilasi lembar gaya, XmlResolver digunakan untuk resolusi
xsl:import
danxsl:include
.Saat menjalankan transformasi, XmlResolver digunakan untuk menyelesaikan fungsi
document()
.Catatan
Fungsi
document()
dinonaktifkan secara default pada kelas XslCompiledTransform. Fitur ini dapat diaktifkan dengan menyetel properti XsltSettings.EnableDocumentFunction ketrue
dan meneruskan objek XsltSettings ke metode Load.
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk