Aracılığıyla paylaş


WCF'de Güvenlik için En İyi Uygulamalar

Aşağıdaki bölümlerde, Windows Communication Foundation (WCF) kullanarak güvenli uygulamalar oluştururken dikkate alınacak en iyi yöntemler listelenmiştir. Güvenlik hakkında daha fazla bilgi için bkz . Güvenlikle İlgili Önemli Noktalar, Veriler için GüvenlikLe İlgili Önemli Noktalar ve Meta Verilerle İlgili Güvenlik Konuları.

SPN'lerle Windows Kimlik Doğrulaması Gerçekleştiren Hizmetleri Tanımlama

Hizmetler kullanıcı asıl adlarıyla (UPN' ler) veya hizmet asıl adlarıyla (SPN) tanımlanabilir. Ağ hizmeti gibi makine hesapları altında çalışan hizmetlerin, çalıştırdıkları makineye karşılık gelen bir SPN kimliği vardır. Kullanıcı hesapları altında çalışan hizmetlerin, çalıştırdıkları kullanıcıya karşılık gelen bir UPN kimliği vardır, ancak setspn araç kullanıcı hesabına SPN atamak için kullanılabilir. Bir hizmeti SPN aracılığıyla tanımlanacak şekilde yapılandırmak ve hizmete bağlanan istemcileri bu SPN'yi kullanacak şekilde yapılandırmak bazı saldırıları daha zor hale getirebilir. Bu kılavuz, Kerberos veya SSPI anlaşması kullanan bağlamalar için geçerlidir. SSPI'nin NTLM'ye geri dönmesi durumunda istemciler yine de bir SPN belirtmelidir.

WSDL'de Hizmet Kimliklerini Doğrulama

WS-SecurityPolicy, hizmetlerin meta verilerde kendi kimlikleri hakkında bilgi yayımlamasına olanak tanır. veya gibi WsdlImporterdiğer yöntemler aracılığıyla svcutil alındığında, bu kimlik bilgileri WCF hizmet uç noktası adreslerinin kimlik özelliklerine çevrilir. Bu hizmet kimliklerinin doğru ve geçerli olduğunu doğrulamayan istemciler hizmet kimlik doğrulamasını etkin bir şekilde atlar. Kötü amaçlı bir hizmet, WSDL'de iddia edilen kimliği değiştirerek kimlik bilgisi iletme ve diğer "ortadaki adam" saldırılarını yürütmek için bu tür istemcilerden yararlanabilir.

NTLM Yerine X509 Sertifikalarını Kullanma

WCF, eşler arası kimlik doğrulaması için iki mekanizma sunar: X509 sertifikaları (eş kanal tarafından kullanılır) ve SSPI anlaşması Kerberos'tan NTLM'ye düşürüldüğü Windows kimlik doğrulaması. 1024 bit veya daha fazla anahtar boyutu kullanan sertifika tabanlı kimlik doğrulaması NTLM'ye çeşitli nedenlerle tercih edilir:

  • karşılıklı kimlik doğrulamasının kullanılabilirliği,

  • daha güçlü şifreleme algoritmalarının kullanımı ve

  • iletilen X509 kimlik bilgilerini kullanma konusunda daha fazla zorluk.

Kimliğe Bürünme Sonrasında Her Zaman Geri Dön

İstemcinin kimliğe bürünmesini sağlayan API'leri kullanırken özgün kimliğe geri döndüğünüzden emin olun. Örneğin, ve WindowsImpersonationContextkullanırken WindowsIdentity aşağıdaki kodda gösterildiği gibi C# using deyimini veya Visual Basic Using deyimini kullanın. WindowsImpersonationContext sınıfı arabirimini IDisposable uygular ve bu nedenle kod bloğu terk using ettikten sonra ortak dil çalışma zamanı (CLR) otomatik olarak özgün kimliğe geri döner.

WindowsIdentity identity = ServiceSecurityContext.Current.WindowsIdentity;
using (identity.Impersonate())
{
    // Run code under the caller's identity.
}
Dim identity = ServiceSecurityContext.Current.WindowsIdentity
Using identity.Impersonate()
    ' Run code under the caller's identity.
End Using

Yalnızca Gerektiği Gibi Kimliğine Bürün

Impersonate sınıfının yöntemini WindowsIdentity kullanarak, çok denetimli bir kapsamda kimliğe bürünme kullanmak mümkündür. Bu, tüm işlemin kapsamı için kimliğe bürünmeye izin veren özelliğinin OperationBehaviorAttributekullanılmasının Impersonation aksinedir. Mümkün olduğunda, daha hassas Impersonate bir yöntem kullanarak kimliğe bürünme kapsamını denetleyin.

Güvenilen Kaynaklardan Meta Verileri Alma

Meta verilerinizin kaynağına güvendiğinizden ve kimsenin meta verilerle oynamadığından emin olun. HTTP protokolü kullanılarak alınan meta veriler düz metin olarak gönderilir ve üzerinde oynanabilir. Hizmet ve HttpsGetUrl özelliklerini kullanıyorsaHttpsGetEnabled, HTTPS protokolunu kullanarak verileri indirmek için hizmet oluşturucusu tarafından sağlanan URL'yi kullanın.

Güvenliği Kullanarak Meta Verileri Yayımlama

Hizmetin yayımlanan meta verileriyle oynanmasını önlemek için aktarım veya ileti düzeyi güvenlikle meta veri değişimi uç noktasının güvenliğini sağlayın. Daha fazla bilgi için bkz . Yayımlama Meta Veri Uç Noktaları ve Nasıl yapılır: Kod Kullanarak Bir Hizmet için Meta Verileri Yayımlama.

Yerel Verenin Kullanımından Emin Olun

Belirli bir bağlama için bir veren adresi ve bağlaması belirtilirse, bu bağlamayı kullanan uç noktalar için yerel veren kullanılmaz. Her zaman yerel vereni kullanmayı bekleyen istemciler, böyle bir bağlama kullanmadığından veya verenin adresini null olacak şekilde bağlamayı değiştirdiklerinden emin olmalıdır.

SAML Belirteç Boyutu Kotaları

Güvenlik Onayları İşaretleme Dili (SAML) belirteçleri, bir Güvenlik Belirteci Hizmeti (STS) tarafından verildiğinde veya istemciler bunları kimlik doğrulaması kapsamında hizmetlere sunduğunda iletilerde seri hale getirildiğinde, saml belirtecini ve diğer ileti bölümlerini karşılamak için maksimum ileti boyutu kotası yeterince büyük olmalıdır. Normal durumlarda varsayılan ileti boyutu kotaları yeterlidir. Ancak, yüzlerce talep içerdiğinden SAML belirtecinin büyük olduğu durumlarda, kotalar serileştirilmiş belirteci barındıracak şekilde artırılmalıdır. Kotalar hakkında daha fazla bilgi için bkz . Veriler için Güvenlik Konuları.

Özel Bağlamalarda SecurityBindingElement.IncludeTimestamp değerini True olarak ayarlayın

Özel bağlama oluşturduğunuzda olarak ayarlamanız IncludeTimestamptruegerekir. Aksi takdirde, olarak ayarlanırsa falseve istemci X509 sertifikası gibi asimetrik anahtar tabanlı bir belirteç kullanıyorsaIncludeTimestamp, ileti imzalanmaz.

Ayrıca bkz.