Kısmi güven en iyi yöntemleri
Bu makalede, Windows Communication Foundation'ı (WCF) kısmi bir güven ortamında çalıştırırken en iyi yöntemler açıklanmaktadır.
Serileştirme
kısmen güvenilen bir uygulamada kullanırken DataContractSerializer bu uygulamaları 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:
- ile seri hale getirilecek sınıfları işaretleme SerializableAttribute.
- Bir sınıfın ISerializable serileştirme işlemini denetlemesine izin vermek için arabirimini uygulama.
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 (, ,
OnDeserializing
veOnDeserialized
gibiOnSerialized
OnSerializing
) genel olarak bildirilmelidir. Ancak, hem açık hem de örtük uygulamaları OnDeserialization(Object) desteklenir.[DataContract]
ile AllowPartiallyTrustedCallersAttribute işaretlenmiş derlemelerde uygulanan türler, seri durumdan çıkarma sırasında yeni oluşturulan nesnenin oluşturucusunun çağrılmadığından tür DataContractSerializer oluşturucusunda güvenlikle ilgili eylemler gerçekleştirmemelidir. Özellikle, türler için[DataContract]
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ği için oluşturucu tarafından zorlanan tüm doğrulama denetimlerinin başarılı bir şekilde geçirildiğini varsayarsak.
IXmlSerializable kullanma
Aşağıdaki en iyi yöntemler, uygulamasını uygulayan IXmlSerializable ve kullanılarak DataContractSerializerseri hale getirilen türler için geçerlidir:
Statik GetSchema yöntem uygulamaları olmalıdır
public
.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 AppDomainiçin yalnızca bir uygulama güvenlik bağlamı olduğunu ve bu bağlamın oluşturma zamanında AppDomain güvenilir bir konak (örneğin, ASP.NET Application Manager çağrısıyla CreateDomain ) oluşturulduğu varsayılır.
Not
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, Orta Güven ASP.NET uygulamasında çalışan kullanıcı kodu gibi ek CAS izinlerini onaylayan 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 Assertönce geçerli iş parçacığının CAS izin kümesini (, PermitOnlyveya Denyç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 AppDomainkullanıcının 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, WCF genel API'lerine çağrılmadan önce bu tür izinler tam güvenilir bir bileşen tarafından onaylanmadığı sürece kısmen güvenilen kodun tam güven izinleri alabileceğini garanti eder. Ancak, tam güven onaylamanın etkilerinin belirli bir iş parçacığına, işleme veya kullanıcı eylemine yalıtıldığını garanti etmez.
En iyi yöntem olarak , PermitOnlyveya Denyçağırarak Assertiş parçacığına özgü izin bağlamı oluşturmaktan kaçının. Bunun yerine, , veya gerekli olmaması AssertDenyiçin uygulamanın kendisine ayrıcalık verin veya PermitOnly reddedin.