PII Güvenlik Kilitleme

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.

  • İz ve ileti günlüklerinde Kişisel Bilgilerin (PII) 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ı dizeleri 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ş hizmetler geçersiz kılınan yapılandırma değerleri kullanılarak çalıştırıldığında istisnalar 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" üzerine kurulmuştur. 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ı dizeleri 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, \Microsoft.NET\Framework\v4.0.20728 %WINDIR%.

Örnek için Web.config'daki appSettings bölümündeki değerleri şifrelemek üzere

  1. Başlat menüsünden Çalıştır...'ı kullanarak bir komut istemi açın... Yazın ve cmd tıklayın.

  2. Aşağıdaki komutu vererek geçerli .NET Framework dizinine gidin: cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728.

  3. aşağıdaki komutu vererek Web.config klasöründeki appSettings 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'de 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 değerleri incelenip üst dizinlerdeki Web.config dosyalarıyla sırayla birleştirilerek ve en sonunda hizmeti içeren dizindeki Web.config dosyasıyla 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ı sırasında istisnalar atmasına neden olan yapılandırma dosyası öğelerini kilitlemek için bir yöntem sunar.

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 dizi öğeyi, alt öğeler koleksiyonu içerisindeki bir öğe grubunu kilitlemek amacıyla, lockElements'ye değer olarak belirtebilirsiniz. Bir öğe içindeki öznitelik kümesini kilitlemek için lockAttributes özniteliğin değeri olarak bir öznitelik listesi belirtilebilir. Bir düğümdeki lockAllElementsExcept veya lockAllAttributesExcept öznitelikleri belirtilerek, belirlenen bir liste dışında, öge veya öznitelikler koleksiyonunun tamamı kilitlenebilir.

Kişisel Bilgi Günlüğü Konfigürasyonu

PII'nin günlüğe kaydedilmesi iki anahtarla denetlenir: Machine.config bulunan ve bilgisayar yöneticisinin PII'nin günlüğe kaydedilmesine izin vermesine veya reddetmesine olanak tanıyan bilgisayar genelindeki bir ayar ve uygulama yöneticisinin bir 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 çapındaki ayar, Machine.configöğesindeki enableLoggingKnownPii öğesinde true ile false veya machineSettings olarak ayarlanarak kontrol edilir. Örneğin, aşağıdakiler uygulamaların PII kaydını etkinleştirmelerine izin verir.

<configuration>
    <system.serviceModel>
        <machineSettings enableLoggingKnownPii="true" />
    </system.serviceModel>
</configuration>

Uyarı

Machine.config dosyasının varsayılan konumu vardır: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.

enableLoggingKnownPii özniteliği Machine.config'de yoksa, PII'nin günlüğe kaydedilmesine izin verilmez.

Bir uygulamada KKK günlüğünün etkinleştirilmesi, kaynak öğenin logKnownPii özniteliğini Web.config veya App.config dosyasında true ya da false olarak ayarlayarak yapılır. Ö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 işlenmez.

PII yalnızca enableLoggingKnownPiitrue olarak ayarlandıysa ve logKnownPiitrue olarak ayarlandıysa günlüğe kaydedilir.

Uyarı

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'ın manuel olarak değiştirilmesi gerekmektedir. Machine.config'in değiştirilmesi sırasında yanlış değerler veya söz dizimi, tüm .NET Framework uygulamalarının çalışmasını engelleyebileceğinden 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:

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.

  2. Machine.config'ı düzenleyerek enableLoggingKnownPii özniteliğini true olarak ayarlayın ve gerekirse üst düğümleri ekleyin.

  3. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örneklerioluşturma başlığındaki yönergeleri izleyin.

  4. Ö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

  1. Machine.config'ı düzenleyerek enableLoggingKnownPii özniteliğini false olarak ayarlayın.

Ayrıca bakınız