PII Güvenlik Kilidi
SecurityLockdown örneği, bir Windows Communication Foundation (WCF) hizmetinin güvenlikle ilgili birkaç özelliğinin aşağıdakiler tarafından nasıl denetleneceğine ilişkin bilgiler sağlar:
Bir hizmetin yapılandırma dosyasındaki hassas bilgileri şifreleme.
İç içe hizmet alt dizinlerinin ayarları geçersiz kılamaması için yapılandırma dosyasındaki öğeleri kilitleme.
İzleme ve ileti günlüklerinde Kişisel Bilgilerin (PII) günlüğe kaydedilmesini denetleme.
Tartışma
Bu özelliklerin her biri, hizmetin güvenliğinin yönlerini denetlemek için ayrı ayrı veya birlikte kullanılabilir. Bu, WCF hizmetinin güvenliğini sağlamaya yönelik kesin bir kılavuz değildir.
.NET Framework yapılandırma dosyaları, veritabanlarına bağlanmak için bağlantı dizesi gibi hassas bilgiler içerebilir. Paylaşılan, Web'de barındırılan senaryolarda, yapılandırma dosyasındaki verilerin gündelik görüntülemeye karşı dayanıklı olması için bu bilgilerin bir hizmetin yapılandırma dosyasında şifrelenmesi istenebilir. .NET Framework 2.0 ve üzeri, Windows Data Protection uygulama programlama arabirimini (DPAPI) veya RSA Şifreleme sağlayıcısını kullanarak yapılandırma dosyasının bölümlerini şifreleme özelliğine sahiptir. DPAPI veya RSA kullanan aspnet_regiis.exe, yapılandırma dosyasının belirli bölümlerini şifreleyebilir.
Web'de barındırılan senaryolarda, hizmetlerin diğer hizmetlerin alt dizinlerinde olması mümkündür. Yapılandırma değerlerini belirlemek için varsayılan semantik, iç içe dizinlerdeki yapılandırma dosyalarının üst dizindeki yapılandırma değerlerini geçersiz kılmasına olanak tanır. Bazı durumlarda bu, çeşitli nedenlerle istenmeyen bir durum olabilir. WCF hizmet yapılandırması, iç içe geçmiş bir hizmet geçersiz kılınan yapılandırma değerleri kullanılarak çalıştırıldığında iç içe yapılandırmanın özel durumlar oluşturması için yapılandırma değerlerinin kilitlenmesini destekler.
Bu örnekte, kullanıcı adı ve parola gibi izleme ve ileti günlüklerinde bilinen Kişisel Bilgilerin (PII) günlüğe kaydedilmesinin nasıl denetlendiği gösterilmektedir. Varsayılan olarak, bilinen PII'nin günlüğe kaydedilmesi devre dışı bırakılır, ancak bazı durumlarda PII'nin günlüğe kaydedilmesi bir uygulamanın hata ayıklamasında önemli olabilir. Bu örnek, Başlarken'i temel alır. Ayrıca bu örnekte izleme ve ileti günlüğü kullanılmaktadır. Daha fazla bilgi için bkz . İzleme ve İleti Günlüğü örneği.
Yapılandırma Dosyası Öğelerini Şifreleme
Paylaşılan bir Web barındırma ortamında güvenlik amacıyla, hassas bilgiler içerebilecek veritabanı bağlantı dizesi gibi bazı yapılandırma öğelerini şifrelemek istenebilir. Yapılandırma öğesi, .NET Framework klasöründe bulunan aspnet_regiis.exe aracı kullanılarak şifrelenebilir. Örneğin, %WINDIR%\Microsoft.NET\Framework\v4.0.20728.
Örneğin Web.config dosyasındaki uygulama Ayarlar bölümündeki değerleri şifrelemek için
Başlat-Çalıştır'ı> kullanarak bir komut istemi açın.... Yazın ve Tamam'a
cmd
tıklayın.Aşağıdaki komutu vererek geçerli .NET Framework dizinine gidin:
cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728
.Aşağıdaki komutu vererek Web.config klasöründeki uygulama Ayarlar yapılandırma ayarlarını şifreleyin:
aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider"
.
Yapılandırma dosyalarının bölümlerini şifreleme hakkında daha fazla bilgi için, ASP.NET yapılandırmasında DPAPI üzerinde nasıl yapılır (Güvenli ASP.NET Uygulamaları Oluşturma: Kimlik Doğrulaması, Yetkilendirme ve Güvenli İletişim) ve ASP.NET yapılandırmasında RSA üzerinde nasıl yapılır (Nasıl Yapılır: RSA Kullanarak ASP.NET 2.0'da Yapılandırma Bölümlerini Şifreleme) okuyarak daha fazla bilgi bulunabilir.
Yapılandırma dosyası öğelerini kilitleme
Web'de barındırılan senaryolarda hizmetlerin alt dizinlerinde olması mümkündür. Bu gibi durumlarda, alt dizindeki hizmetin yapılandırma değerleri Machine.config içindeki değerler incelenerek ve üst dizinlerdeki herhangi bir Web.config dosyasıyla ardışık olarak birleştirilerek ve son olarak hizmeti içeren dizinde Web.config dosyası birleştirilerek hesaplanır. Çoğu yapılandırma öğesi için varsayılan davranış, alt dizinlerdeki yapılandırma dosyalarının üst dizinlerde ayarlanan değerleri geçersiz kılması için izin vermektir. Bazı durumlarda, alt dizinlerdeki yapılandırma dosyalarının üst dizin yapılandırmasında ayarlanan değerleri geçersiz kılmasını önlemek istenebilir.
.NET Framework, kilitli yapılandırma öğelerini geçersiz kılan yapılandırmaların çalışma zamanı özel durumları oluşturması için yapılandırma dosyası öğelerini kilitlemek için bir yol sağlar.
Yapılandırma öğesi, yapılandırma dosyasındaki bir düğümün lockItem
özniteliği belirtilerek kilitlenebilir. Örneğin, iç içe yapılandırma dosyalarındaki hesap makinesi hizmetlerinin davranışı değiştirememesi için yapılandırma dosyasındaki CalculatorServiceBehavior düğümünü kilitlemek için aşağıdaki yapılandırma kullanılabilir.
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior" lockItem="true">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Yapılandırma öğelerinin kilitlenmesi daha belirgin olabilir. Bir öğe listesi, bir alt öğe koleksiyonu içindeki bir öğe kümesini kilitlemek için değerine değer lockElements
olarak belirtilebilir. Bir öğe içindeki öznitelik kümesini kilitlemek için lockAttributes
özniteliğin değeri olarak bir öznitelik listesi belirtilebilir. Bir düğümdeki veya öznitelikleri belirtilerek belirtilen liste dışında bir öğe veya lockAllAttributesExcept
öznitelik koleksiyonunun lockAllElementsExcept
tamamı kilitlenebilir.
PII Günlük Yapılandırması
PII'nin günlüğe kaydedilmesi iki anahtarla denetlenir: Machine.config'de bulunan ve bilgisayar yöneticisinin PII'nin günlüğe kaydedilmesine izin vermesine veya reddetmesine olanak tanıyan bilgisayar genelinde bir ayar ve uygulama yöneticisinin Web.config veya App.config dosyasındaki her kaynak için PII günlüğünü değiştirmesine olanak tanıyan bir uygulama ayarı.
Bilgisayar genelindeki ayar, Machine.config öğesinde machineSettings
veya false
olarak ayarlanarak enableLoggingKnownPii
true
denetlenilir. Örneğin, aşağıdakiler uygulamaların PII günlüğünü açmasına izin verir.
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true" />
</system.serviceModel>
</configuration>
Not
Machine.config dosyasının varsayılan konumu vardır: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.
enableLoggingKnownPii
Öznitelik Machine.config içinde yoksa, PII günlüğüne izin verilmez.
Web.config veya false
App.config dosyasında kaynak öğenin true
özniteliği ayarlanarak logKnownPii
bir uygulama için PII günlüğünün etkinleştirilmesi gerçekleştirilir. Örneğin, aşağıdakiler hem ileti günlüğü hem de izleme günlüğü için PII günlüğünü etkinleştirir.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging" logKnownPii="true">
<listeners>
...
</listeners>
</source>
<source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
<listeners>
...
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
logKnownPii
Öznitelik belirtilmezse PII günlüğe kaydedilmez.
PII yalnızca her ikisi de enableLoggingKnownPii
olarak ayarlandıysa true
ve logKnownPii
olarak ayarlandıysa günlüğe true
kaydedilir.
Not
System.Diagnostics, yapılandırma dosyasında listelenen ilk öznitelik dışındaki tüm kaynaklardaki tüm öznitelikleri yoksayar. Özniteliği yapılandırma logKnownPii
dosyasındaki ikinci kaynağa eklemenin hiçbir etkisi yoktur.
Önemli
Bu örneği çalıştırmak için Machine.config dosyasının el ile değiştirilmesi gerekir. Machine.config yanlış değerler veya söz dizimi değiştirildiğinde tüm .NET Framework uygulamalarının çalışmasını engelleyebilecek şekilde dikkatli olunmalıdır.
DpAPI ve RSA kullanarak yapılandırma dosyası öğelerini şifrelemek de mümkündür. Daha fazla bilgi için aşağıdaki bağlantılara bakın:
Güvenli ASP.NET Uygulamaları Oluşturma: Kimlik Doğrulaması, Yetkilendirme ve Güvenli İletişim
Nasıl Yapılır: RSA Kullanarak ASP.NET 2.0'da Yapılandırma Bölümlerini Şifreleme
Örneği ayarlamak, derlemek ve çalıştırmak için
Windows Communication Foundation Örnekleri için Tek Seferlik Kurulum Yordamı'nı gerçekleştirdiğinizden emin olun.
Gerekirse üst düğümleri ekleyerek özniteliğini olarak ayarlamak
enableLoggingKnownPii
içintrue
Machine.config dosyasını düzenleyin.Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.
Örneği tek veya bilgisayarlar arası bir yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.
Örneği temizlemek için
- Machine.config dosyasını düzenleyerek özniteliğini
enableLoggingKnownPii
olarakfalse
ayarlayın.