Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Windows Communication Foundation'ı (WCF) kısmi bir güven ortamında çalıştırırken en iyi yöntemler açıklanmaktadır.
Seri -leştirme
Kısmen güvenilen bir uygulamada DataContractSerializer kullanırken bu yöntemleri uygulayın.
Tüm serileştirilebilir türler açıkça özniteliğiyle [DataContract] işaretlenmelidir. Kısmi güven ortamında aşağıdaki teknikler desteklenmez:
- Seri hale getirilecek sınıfları SerializableAttribute ile işaretleme.
- Bir sınıfın serileştirme işlemini denetlemesine olanak tanımak için ISerializable arabirimini uygulamak.
DataContractSerializer'ı Kullanma
özniteliğiyle
[DataContract]işaretlenmiş tüm türler genel olmalıdır. Ortak olmayan türler kısmi güven ortamında serileştirilemez.Seri hale getirilebilir
[DataContract]bir türdeki tüm[DataContract]üyeler genel olmalıdır. Ortak[DataMember]olmayan bir tür kısmi güven ortamında serileştirilemez.Serileştirme olaylarını işleyen yöntemler (
OnSerializing,OnSerialized,OnDeserializingveOnDeserializedgibi) public olarak bildirilmelidir. Ancak, hem açık hem de örtük uygulamaları OnDeserialization(Object) tarafından desteklenmektedir.[DataContract]ile AllowPartiallyTrustedCallersAttribute işaretlenmiş derlemelerde uygulanan türler, yeni oluşturulan nesnenin seri durumdan çıkarılması sırasında oluşturucusunun çağrılmaması nedeniyle tür DataContractSerializer oluşturucusunda güvenlikle ilgili eylemler gerçekleştirmemelidir. Özellikle[DataContract]türleri için aşağıdaki yaygın güvenlik tekniklerinden kaçınılmalıdır:Türün oluşturucusunun iç veya özel olmasını sağlayarak kısmi güven erişimini kısıtlamaya çalışma.
Türün oluşturucusunun öğesine bir
[LinkDemand]ekleyerek türe erişimi kısıtlama.Nesnenin başarıyla örneklendiğini varsayarak, oluşturucu tarafından uygulanan tüm doğrulama kontrollerinin başarıyla geçtiğini varsayabiliriz.
IXmlSerializable kullanma
Aşağıdaki en iyi yöntemler, IXmlSerializable'yi uygulayan ve DataContractSerializer kullanılarak seri hale getirilen türler için geçerlidir.
GetSchema statik metot implementasyonları
publicolmalıdır.Arabirimini uygulayan IXmlSerializable örnek yöntemleri olmalıdır
public.
Kısmen Güvenilen Arayanlardan Gelen Çağrılara İzin Veren Tam Güvenilir Platform Kodundan WCF Kullanma
WCF kısmi güven güvenlik modeli, WCF ortak yönteminin veya özelliğinin herhangi bir çağıranın barındırma uygulamasının kod erişim güvenliği (CAS) bağlamında çalıştığını varsayar. WCF ayrıca her AppDomain için yalnızca bir uygulama güvenlik bağlamı olduğunu ve bu bağlamın, AppDomain oluşturma anında güvenilir bir sunucu tarafından (örneğin, CreateDomain çağrısıyla ya da ASP.NET Application Manager ile) kurulduğu varsayılır.
Uyarı
Kod Erişim Güvenliği (CAS), .NET Framework ve .NET'in tüm sürümlerinde kullanım dışı bırakılmıştır. .NET'in son sürümleri CAS ek açıklamalarını dikkate almaz ve CAS ile ilgili API'ler kullanılırsa hata üretir. Geliştiriciler, güvenlik görevlerini yerine getirmek için alternatif yöntemler aramalıdır.
Bu güvenlik modeli, ek CAS izinlerini talep edemeyen, örneğin bir Orta Düzey Güven ASP.NET uygulamasında çalışan kullanıcı kodu gibi, kullanıcı tarafından yazılmış uygulamalar için geçerlidir. Ancak, tam olarak güvenilen platform kodu (örneğin, genel derleme önbelleğine yüklenen ve kısmen güvenilen koddan çağrıları kabul eden bir üçüncü taraf derlemesi), uygulama düzeyinde güvenlik açıklarının oluşmasını önlemek için kısmen güvenilen bir uygulama adına WCF'ye çağrı yaparken açıkça dikkatli olmalıdır.
Tam güven kodu, kısmen güvenilen kod adına WCF API'lerini çağırmadan önce, geçerli iş parçacığının CAS izin kümesini Assert, PermitOnly veya Deny'yi çağırarak değiştirmekten kaçınmalıdır. Uygulama düzeyi güvenlik bağlamından bağımsız bir iş parçacığına özgü izin bağlamının onaylanması, reddedilmesi veya başka bir şekilde oluşturulması beklenmeyen davranışlara neden olabilir. Uygulamaya bağlı olarak, bu davranış uygulama düzeyinde güvenlik açıklarına neden olabilir.
İş parçacığına özgü bir izin bağlamı kullanarak WCF'ye çağrıda bulunan kod, ortaya çıkabilecek aşağıdaki durumları işlemeye hazır olmalıdır:
İş parçacığına özgü güvenlik bağlamı, işlem süresi boyunca korunamayabilir ve bu da olası güvenlik özel durumlarına neden olabilir.
İç WCF kodu ve kullanıcı tarafından sağlanan geri çağırmalar, çağrının ilk başlatıldığı koddan farklı bir güvenlik bağlamında çalıştırılabilir. Bu bağlamlar şunlardır:
Uygulama izin bağlamı.
Çalışmakta olan AppDomain'nın mevcut kullanım ömrü boyunca WCF'ye çağrı yapmak için kullanılan, diğer kullanıcı iş parçacıkları tarafından daha önce oluşturulan iş parçacığına özgü izin bağlamı.
WCF, tam güvenilir bir bileşen tarafından önce onaylanmadıkça kısmen güvenilen kodun tam güven izinleri alamayacağını garanti eder. Ancak, tam güven beyanının etkilerinin belirli bir iş parçacığı, işlem veya kullanıcı eylemi ile sınırlı olduğunu garanti etmez.
En iyi uygulama olarak, Assert, PermitOnly, veya Deny çağırarak iş parçacığına özgü izin bağlamı oluşturmaktan kaçının. Bunun yerine, uygulamanın kendisine ayrıcalık verin veya reddedin, böylece Assert, Deny veya PermitOnly gerekli olmasın.