XAML güvenliğiyle ilgili dikkat edilmesi gerekenler
Bu makalede, XAML ve .NET XAML Hizmetleri API'sini kullanırken uygulamalarda güvenlik için en iyi yöntemler açıklanmaktadır.
Uygulamalarda Güvenilmeyen XAML
Genel anlamda güvenilmeyen XAML, uygulamanızın özellikle içermediği veya yaymadığı herhangi bir XAML kaynağıdır.
Güvenilir ve imzalı bir resx
derleme içinde -type kaynağı olarak derlenen veya depolanan XAML, doğal olarak güvenilmez. Derlemeye bir bütün olarak güvendiğiniz kadar XAML'ye de güvenebilirsiniz. Çoğu durumda, yalnızca bir akıştan veya diğer G/Ç'den yükleyebileceğiniz bir XAML kaynağı olan gevşek XAML'nin güven yönleriyle ilgilenirsiniz. Gevşek XAML, dağıtım ve paketleme altyapısına sahip bir uygulama modelinin belirli bir bileşeni veya özelliği değildir. Ancak, bir derleme gevşek XAML yüklemeyi içeren bir davranış uygulayabilir.
Güvenilmeyen XAML için genellikle güvenilmeyen kod gibi davranmalısınız. Güvenilmeyen XAML'nin güvenilir kodunuze erişmesini önlemek için korumalı alan veya diğer metaforları kullanın.
XAML özelliklerinin doğası, XAML'ye nesneleri oluşturma ve özelliklerini ayarlama hakkı verir. Bu özellikler ayrıca tür dönüştürücülerine erişmeyi, işaretleme uzantılarını, blokları vb. kullanarak uygulama etki alanındaki derlemeleri x:Code
eşlemeyi ve bunlara erişmeyi içerir.
XAML, dil düzeyindeki özelliklerine ek olarak birçok teknolojide kullanıcı arabirimi tanımı için kullanılır. Güvenilmeyen XAML'nin yüklenmesi, kötü amaçlı kimlik sahtekarlık kullanıcı arabiriminin yüklenmesi anlamına gelebilir.
Okuyucular ve Yazarlar Arasında Bağlam Paylaşma
XAML okuyucuları ve XAML yazıcıları için .NET XAML Hizmetleri mimarisi genellikle bir XAML okuyucusu ile XAML yazıcısı veya paylaşılan bir XAML şema bağlamı paylaşımını gerektirir. XAML düğüm döngüsü mantığı yazıyorsanız veya özel bir kaydetme yolu sağlıyorsanız nesneleri veya bağlamları paylaşmanız gerekebilir. Güvenilir ve güvenilmeyen kod arasında XAML okuyucusu/yazıcı sınıfları için XAML okuyucu örneklerini, XAML şeması bağlamını veya ayarlarını paylaşmayın.
CLR tabanlı bir tür yedeklemesi için yazma XAML nesnesi içeren çoğu senaryo ve işlem yalnızca varsayılan XAML şema bağlamı kullanabilir. Varsayılan XAML şema bağlamı, tam güveni tehlikeye atabilecek ayarları açıkça içermez. Bu nedenle, güvenilir ve güvenilmeyen XAML okuyucu/yazıcı bileşenleri arasında bağlamı paylaşmak güvenlidir. Ancak, bunu yaparsanız, bu tür okuyucuları ve yazarları ayrı AppDomain kapsamlarda tutmak en iyi yöntemdir ve bunlardan biri kısmi güven için özel olarak tasarlanmıştır/korumalıdır.
XAML Ad Alanları ve Derleme Güveni
XAML'nin özel bir XAML ad alanı eşlemesini bir derlemeye yorumlamasına yönelik temel nitelenmemiş söz dizimi ve tanımı, uygulama etki alanına yüklenen güvenilir ve güvenilmeyen bir derlemeyi ayırt etmez. Bu nedenle, güvenilmeyen bir derlemenin güvenilir bir derlemenin hedeflenen XAML ad alanı eşlemesini yanıltıp bir XAML kaynağının bildirilen nesne ve özellik bilgilerini yakalaması teknik olarak mümkündür. Bu durumdan kaçınmak için güvenlik gereksinimleriniz varsa, hedeflenen XAML ad alanı eşlemeniz aşağıdaki tekniklerden biri kullanılarak yapılmalıdır:
Uygulamanızın XAML'i tarafından yapılan herhangi bir XAML ad alanı eşlemesinde tanımlayıcı ada sahip tam derleme adı kullanın.
XAML okuyucularınız ve XAML nesne yazıcılarınız için belirli XamlSchemaContext bir derleme oluşturarak derleme eşlemesini sabit bir başvuru derlemeleri kümesiyle kısıtlayın. Bkz. XamlSchemaContext(IEnumerable<Assembly>).
XAML Tür Eşlemesi ve Tür Sistem Erişimi
XAML, CLR'nin temel CLR tür sistemini nasıl uyguladığına birçok yönden eş olan kendi tür sistemini destekler. Ancak, tür bilgilerine göre bir tür hakkında güven kararları almakta olduğunuz tür farkındalığının belirli yönleri için, CLR yedekleme türlerindeki tür bilgilerine ertelemeniz gerekir. Bunun nedeni, XAML türü sisteminin belirli raporlama özelliklerinden bazılarının sanal yöntemler olarak açık bırakılması ve bu nedenle özgün .NET XAML Hizmetleri uygulamalarının tam olarak denetimi altında olmamasıdır. Bu genişletilebilirlik noktaları, XAML türü sisteminin xaml'in genişletilebilirliği ve olası alternatif tür eşleme stratejileriyle varsayılan CLR destekli uygulama ve varsayılan XAML şema bağlamı karşılaştırması için genişletilebilir olması nedeniyle vardır. Daha fazla bilgi için ve XamlMemberözelliklerinin birkaçı hakkındaki belirli notlara XamlType bakın.
Ayrıca bkz.
.NET Desktop feedback