Udostępnij przez


Blokada bezpieczeństwa danych osobowych

W przykładzie SecurityLockdown pokazano, jak kontrolować kilka funkcji związanych z zabezpieczeniami usługi Windows Communication Foundation (WCF) przez:

  • Szyfrowanie poufnych informacji w pliku konfiguracji usługi.

  • Blokowanie elementów w pliku konfiguracji w taki sposób, aby zagnieżdżone podkatalogi usługi nie mogły zastąpić ustawień.

  • Kontrolowanie rejestrowania informacji umożliwiających identyfikację w dziennikach śledzenia i dziennikach komunikatów.

Dyskusja

Każda z tych funkcji może służyć oddzielnie lub razem do kontrolowania aspektów zabezpieczeń usługi. Nie jest to ostateczny przewodnik dotyczący zabezpieczania usługi WCF.

Pliki konfiguracji programu .NET Framework mogą zawierać poufne informacje, takie jak parametry połączenia w celu nawiązania połączenia z bazami danych. W udostępnionych scenariuszach hostowanych w sieci Web może być pożądane szyfrowanie tych informacji w pliku konfiguracji usługi, tak aby dane zawarte w pliku konfiguracji były odporne na przypadkowe wyświetlanie. Program .NET Framework 2.0 lub nowszy ma możliwość szyfrowania fragmentów pliku konfiguracji przy użyciu interfejsu programowania aplikacji ochrony danych systemu Windows (DPAPI) lub dostawcy usług kryptograficznych RSA. aspnet_regiis.exe przy użyciu interfejsu DPAPI lub RSA może szyfrować fragmenty pliku konfiguracji.

W scenariuszach hostowanych w Internecie można mieć usługi w podkatalogach innych usług. Domyślna semantyka określania wartości konfiguracji umożliwia plikom konfiguracji w katalogach zagnieżdżonych zastąpienie wartości konfiguracji w katalogu nadrzędnym. W niektórych sytuacjach może to być niepożądane z różnych powodów. Konfiguracja usługi WCF obsługuje blokowanie wartości konfiguracji, dzięki czemu zagnieżdżona konfiguracja generuje wyjątki, gdy zagnieżdżona usługa jest uruchamiana przy użyciu zastąpionych wartości konfiguracji.

W tym przykładzie pokazano, jak kontrolować rejestrowanie znanych danych osobowych w dziennikach śledzenia i komunikatów, takich jak nazwa użytkownika i hasło. Domyślnie rejestrowanie znanych danych piI jest wyłączone, jednak w niektórych sytuacjach rejestrowanie danych piI może być ważne podczas debugowania aplikacji. Ten przykład jest oparty na Rozpoczynanie. Ponadto w tym przykładzie użyto śledzenia i rejestrowania komunikatów. Aby uzyskać więcej informacji, zobacz przykład Śledzenie i rejestrowanie komunikatów .

Szyfrowanie elementów pliku konfiguracji

Ze względów bezpieczeństwa w udostępnionym środowisku hostingu sieci Web może być pożądane szyfrowanie niektórych elementów konfiguracji, takich jak parametry połączenia bazy danych, które mogą zawierać poufne informacje. Element konfiguracji może zostać zaszyfrowany przy użyciu narzędzia aspnet_regiis.exe znalezionego w folderze .NET Framework Na przykład %WINDIR%\Microsoft.NET\Framework\v4.0.20728.

Aby zaszyfrować wartości w sekcji appSettings w Web.config dla przykładu

  1. Otwórz wiersz polecenia, używając polecenia Start-Run>.... Wpisz cmd, a następnie kliknij przycisk OK.

  2. Przejdź do bieżącego katalogu .NET Framework, wydając następujące polecenie: cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728.

  3. Zaszyfruj ustawienia konfiguracji appSettings w folderze Web.config, wydając następujące polecenie: aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider".

Więcej informacji na temat szyfrowania sekcji plików konfiguracji można znaleźć, czytając instrukcje dotyczące interfejsu DPAPI w konfiguracji ASP.NET (Tworzenie bezpiecznych aplikacji ASP.NET: uwierzytelnianie, autoryzacja i bezpieczna komunikacja) oraz instrukcje dotyczące rsa w konfiguracji ASP.NET (Instrukcje: Szyfrowanie sekcji konfiguracji w ASP.NET 2.0 przy użyciu rsA).

Blokowanie elementów pliku konfiguracji

W scenariuszach hostowanych w Internecie można mieć usługi w podkatalogach usług. W takich sytuacjach wartości konfiguracji usługi w podkatalogu są obliczane przez badanie wartości w Machine.config i kolejne scalanie z plikami Web.config w katalogach nadrzędnych, poruszając się w dół drzewa katalogów, a na koniec scalając z plikiem Web.config w katalogu zawierającym usługę. Domyślne zachowanie większości elementów konfiguracji polega na umożliwieniu plików konfiguracji w podkatalogach zastąpienia wartości ustawionych w katalogach nadrzędnych. W niektórych sytuacjach może być pożądane, aby zapobiec temu, by pliki konfiguracyjne w podkatalogach nadpisywały wartości ustawione w konfiguracji katalogu nadrzędnego.

.NET Framework umożliwia blokowanie elementów pliku konfiguracji, dzięki czemu konfiguracje, które zastępują zablokowane elementy konfiguracji, zgłaszają wyjątki w czasie wykonywania.

Element konfiguracji można zablokować, określając lockItem atrybut węzła w pliku konfiguracji, na przykład w celu zablokowania węzła CalculatorServiceBehavior w pliku konfiguracji, aby usługi kalkulatora w zagnieżdżonych plikach konfiguracji nie mogły zmienić zachowania, można użyć następującej konfiguracji.

<configuration>
   <system.serviceModel>
      <behaviors>
          <serviceBehaviors>
             <behavior name="CalculatorServiceBehavior" lockItem="true">
               <serviceMetadata httpGetEnabled="True"/>
               <serviceDebug includeExceptionDetailInFaults="False" />
             </behavior>
          </serviceBehaviors>
       </behaviors>
    </system.serviceModel>
</configuration>

Blokowanie elementów konfiguracji może być bardziej szczegółowe. Listę elementów można określić jako wartość lockElements , aby zablokować zestaw elementów w kolekcji elementów podrzędnych. Listę atrybutów można określić jako wartość lockAttributes , aby zablokować zestaw atrybutów w elemecie. Cała kolekcja elementów lub atrybutów może być zablokowana z wyjątkiem określonej listy poprzez określenie atrybutów lockAllElementsExcept lub lockAllAttributesExcept na węźle.

Konfiguracja logowania danych osobowych (PII)

Rejestrowanie danych piI jest kontrolowane przez dwa przełączniki: ustawienie dla całego komputera znajdujące się w Machine.config, które umożliwia administratorowi komputera zezwolenie na rejestrowanie danych piI i ustawienie aplikacji, które umożliwia administratorowi aplikacji przełączanie rejestrowania piI dla każdego źródła w pliku Web.config lub App.config.

Ustawienie całego komputera jest kontrolowane przez ustawienie enableLoggingKnownPii na true lub false w elemencie machineSettings w Machine.config. Na przykład można włączyć logowanie PII w aplikacjach.

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

Uwaga / Notatka

Plik Machine.config ma domyślną lokalizację: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.

Jeśli atrybut enableLoggingKnownPii nie jest obecny w Machine.config, rejestrowanie danych osobowych jest niedozwolone.

Włączenie rejestrowania danych piI dla aplikacji odbywa się przez ustawienie logKnownPii atrybutu elementu źródłowego na true lub false w pliku Web.config lub App.config. Na przykład następujące polecenie umożliwia rejestrowanie danych PII zarówno w logach komunikatów, jak i logach śledzenia.

<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 Jeśli atrybut nie zostanie określony, dane osobowe nie są rejestrowane.

Dane osobowe są rejestrowane tylko wtedy, gdy oba enableLoggingKnownPii oraz true są ustawione na logKnownPii i true.

Uwaga / Notatka

System.Diagnostics ignoruje wszystkie atrybuty we wszystkich źródłach, z wyjątkiem pierwszego wymienionego w pliku konfiguracji. Dodanie atrybutu logKnownPii do drugiego źródła w pliku konfiguracji nie ma wpływu.

Ważne

Aby uruchomić ten przykład, wymaga ręcznej modyfikacji Machine.config. Podczas modyfikowania Machine.config należy zachować ostrożność, ponieważ nieprawidłowe wartości lub składnia mogą uniemożliwić działanie wszystkich aplikacji programu .NET Framework.

Istnieje również możliwość szyfrowania elementów pliku konfiguracji przy użyciu interfejsu DPAPI i RSA. Aby uzyskać więcej informacji, skorzystaj z następujących linków:

Aby skonfigurować, skompiluj i uruchom przykład

  1. Upewnij się, że wykonano procedurę instalacji One-Time dla przykładów programu Windows Communication Foundation.

  2. Edytuj Machine.config, aby ustawić enableLoggingKnownPii atrybut na true, dodając węzły nadrzędne w razie potrzeby.

  3. Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w Kompilowanie przykładów Windows Communication Foundation.

  4. Aby uruchomić przykład w konfiguracji pojedynczej lub między komputerami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.

Aby wyczyścić próbkę

  1. Edytuj Machine.config, aby ustawić enableLoggingKnownPii atrybut na false.

Zobacz także