XSLT Güvenlik Konuları
XSLT dili, size çok fazla güç ve esneklik sağlayan zengin bir özellik kümesine sahiptir. Kullanışlı olsa da dış kaynaklar tarafından da yararlanabilecek birçok özellik içerir. XSLT'yi güvenli bir şekilde kullanmak için, XSLT kullanırken ortaya çıkan güvenlik sorunlarının türlerini ve bu riskleri azaltmak için kullanabileceğiniz temel stratejileri anlamanız gerekir.
XSLT Uzantıları
İki popüler XSLT uzantısı stil sayfası betiği ve uzantı nesneleridir. Bu uzantılar XSLT işlemcisinin kod yürütmesine olanak sağlar.
Uzantı nesneleri, XSL dönüşümlerine programlama özellikleri ekler.
Betikler, uzantı öğesi kullanılarak
msxsl:script
stil sayfasına eklenebilir.
Uzantı Nesneleri
Uzantı nesneleri yöntemi kullanılarak AddExtensionObject eklenir. Uzantı nesnelerini desteklemek için FullTrust izin kümesi gereklidir. Bu, uzantı nesne kodu yürütürken izinlerin yükseltilmesinin gerçekleşmemesini sağlar. FullTrust izinleri olmadan yöntemini çağırmaya AddExtensionObject çalışmak, bir güvenlik özel durumu oluşturmayla sonuçlanıyor.
Stil Sayfası Betikleri
Betikler, uzantı öğesi kullanılarak msxsl:script
bir stil sayfasına eklenebilir. Betik desteği, sınıfta varsayılan olarak devre dışı bırakılan isteğe bağlı bir özelliktir XslCompiledTransform . Betik oluşturma özelliği true
olarak ayarlanarak XsltSettings.EnableScript ve nesnesi yöntemine Load geçirilerek XsltSettings etkinleştirilebilir.
Not
Betik blokları yalnızca .NET Framework'te desteklenir. .NET Core veya .NET 5 veya üzeri sürümlerde desteklenmez.
Yönergeler
Betik oluşturmayı yalnızca stil sayfası güvenilir bir kaynaktan geldiğinde etkinleştirin. Stil sayfasının kaynağını doğrulayamıyorsanız veya stil sayfası güvenilir bir kaynaktan gelmiyorsa, XSLT ayarları bağımsız değişkenine geçin null
.
Dış Kaynaklar
XSLT dili, işlemcinin URI başvurularını çözümlemesi document()
gereken , xsl:include
veya işlevi gibi xsl:import
özelliklere sahiptir. sınıfı XmlResolver dış kaynakları çözümlemek için kullanılır. Dış kaynakların aşağıdaki iki durumda çözülmesi gerekebilir:
Stil sayfası derlenirken ve XmlResolver
xsl:include
çözünürlük içinxsl:import
kullanılır.Dönüştürme yürütülürken işlevi XmlResolver çözümlemek
document()
için kullanılır.Not
İşlev
document()
, sınıfında varsayılan olarak XslCompiledTransform devre dışıdır. Bu özellik, özelliğitrue
olarak ayarlanarak XsltSettings.EnableDocumentFunction ve nesnesi yöntemine XsltSettingsLoad geçirilerek etkinleştirilebilir.
ve Transform yöntemlerinin Load her biri, bağımsız değişkenlerinden biri olarak kabul XmlResolver eden aşırı yüklemeler içerir. XmlResolver belirtilmezse, kimlik bilgisi olmayan bir varsayılan XmlUrlResolver kullanılır.
Yönergeler
İşlevi document()
yalnızca stil sayfası güvenilir bir kaynaktan geldiğinde etkinleştirin.
Aşağıdaki listede bir XmlResolver nesne belirtmek isteyebileceğiniz zamanlar açıklanmaktadır:
XSLT işleminin kimlik doğrulaması gerektiren bir ağ kaynağına erişmesi gerekiyorsa, gerekli kimlik bilgileriyle bir XmlResolver kullanabilirsiniz.
XSLT işleminin erişebileceği kaynakları kısıtlamak istiyorsanız, doğru izin kümesine sahip bir XmlSecureResolver kullanabilirsiniz. XmlSecureResolver Denetlemediğiniz veya güvenilmeyen bir kaynağı açmanız gerekiyorsa sınıfını kullanın.
Davranışı özelleştirmek istiyorsanız, kendi XmlResolver sınıfınızı uygulayabilir ve kaynakları çözümlemek için kullanabilirsiniz.
Dış kaynaklara erişildiğinden emin olmak istiyorsanız, bağımsız değişken için XmlResolver belirtebilirsiniz
null
.