XAML güvenlik konuları

Bu makalede XAML ve .NET XAML Hizmetleri API 'SI kullandığınızda uygulamalarda güvenlik için en iyi yöntemler açıklanmaktadır.

Uygulamalarda güvenilmeyen XAML

En genel anlamda güvenilir olmayan XAML, uygulamanızın özel olarak içermediği veya yaymadığından herhangi bir XAML kaynağıdır.

resxGüvenilen ve imzalı bir derlemede bir-Type kaynağı olarak derlenen veya depolanan XAML, doğal olarak güvenilmez değildir. Derlemeye bir bütün olarak güvendiğinize göre XAML 'ye güvenebilirsiniz. Çoğu durumda, yalnızca gevşek XAML 'nin güven yönleri ile ilgileniyorsunuz. Bu, bir akıştan veya başka bir g/ç 'den yüklediğiniz XAML kaynağıdır. 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, bunu, güvenilir olmayan kod gibi genel olarak aynı şekilde ele almanız gerekir. Güvenilir olmayan XAML 'in güvenilir kodunuza erişmesini engellemek için korumalı alana alma veya diğer metafeors kullanın.

XAML özelliklerinin doğası XAML 'e nesne oluşturma ve özelliklerini ayarlama hakkını verir. Bu yetenekler ayrıca tür Dönüştürücülerine erişme, uygulama etki alanındaki derlemelere eşleme ve bunlara erişme, biçimlendirme uzantıları, bloklar vb. kullanarak da dahildir x:Code .

Dil düzeyi özelliklerine ek olarak, XAML birçok teknolojiden Kullanıcı arabirimi tanımı için kullanılır. Güvenilmeyen XAML yüklemek, kötü amaçlı sahtekarlık Kullanıcı Arabirimi yükleme anlamına gelebilir.

Okuyucular ve yazarlar arasında paylaşım bağlamı

Xaml okuyucuları ve XAML yazıcılarının .NET XAML Hizmetleri mimarisi, genellikle xaml okuyucuyu bir XAML yazıcısında veya paylaşılan XAML şeması bağlamına paylaşmayı gerektirir. XAML düğüm döngüsü mantığı yazıyorsanız veya özel bir kayıt yolu sağlıyorsanız, nesne veya bağlamların paylaşılması gerekebilir. Xaml okuyucu örneklerini, varsayılan olmayan XAML şema bağlamını veya XAML okuyucu/yazıcı sınıfları için güvenilen ve güvenilmeyen kod arasındaki ayarları paylaşmayın.

CLR tabanlı bir tür yedeklemesi için yazma XAML nesnesi ile ilgili çoğu senaryo ve işlemler yalnızca varsayılan XAML şema bağlamını kullanabilir. Varsayılan XAML şeması bağlamı tam güveni tehlikeye atabilecek ayarları açıkça içermez. Bu nedenle, güvenilen ve güvenilmeyen XAML okuyucu/yazıcı bileşenleri arasında bağlam paylaşılması güvenlidir. Ancak bunu yaparsanız, bu tür okuyucuları ve yazarları ayrı kapsamlar halinde tutmak en iyi uygulamadır. Bu, AppDomain kısmi güven için özel olarak tasarlanan/korumalı bir uygulamadır.

XAML ad alanları ve derleme güveni

XAML 'in özel XAML ad alanı eşlemesini bir derlemeye nasıl yorumlayacağını gösteren temel nitelenmemiş sözdizimi ve tanım, uygulama etki alanına yüklenmiş güvenilir ve güvenilir olmayan bir derlemeyi ayırt etmez. Bu nedenle, güvenilmeyen bir derlemenin güvenilen bir derlemenin amaçlanan XAML ad alanı eşlemesini taklit etmek ve XAML kaynağı tarafından tanımlanan nesne ve özellik bilgilerini yakalamak Teknik olarak olasıdır. Bu durumdan kaçınmak için güvenlik gereksinimleriniz varsa, amaçlanan XAML ad alanı eşlemenin aşağıdaki tekniklerden biri kullanılarak yapılması gerekir:

  • Uygulamanızın XAML tarafından yapılan herhangi bir XAML ad alanı eşlemesinde tanımlayıcı ada sahip tam bir derleme adı kullanın.

  • XamlSchemaContextXaml okuyucular ve xaml nesne yazıcılarınız için özel bir derleme yaparak bütünleştirilmiş kod eşlemesini sabit bir başvuru derlemeleri kümesiyle kısıtlayın. Bkz. XamlSchemaContext(IEnumerable<Assembly>).

XAML tür eşleme ve tür sistemi erişimi

XAML, CLR 'nin temel CLR tür sistemini nasıl uyguladığı ile ilgili birçok şekilde kendi tür sistemini destekler. Ancak, tür bilgilerine dayanan bir tür hakkında güven kararları verirken tür tanıma 'nın belirli yönleri için, CLR yedekleme türlerindeki tür bilgilerine ertelenmesi gerekir. Bunun nedeni, XAML tür sisteminin bazı belirli raporlama yetilerinin sanal yöntemlerle açık bırakıldığı ve bu nedenle özgün .NET XAML Hizmetleri uygulamalarının denetiminde tam olarak değil. Bu genişletilebilirlik noktaları vardır çünkü XAML tür sistemi XAML 'nin genişletilebilirliğini ve olası alternatif tür eşleme stratejilerini ve varsayılan CLR-desteklenen uygulamayı ve varsayılan XAML şeması bağlamını eşleştirmek için kullanılır. Daha fazla bilgi için, ve özelliklerinin çeşitli özellikleriyle ilgili notlara bakın XamlTypeXamlMember .

Ayrıca bkz.