Бөлісу құралы:


Блокировка безопасности PII

В примере SecurityLockdown показано, как управлять несколькими функциями, связанными с безопасностью службы Windows Communication Foundation (WCF), следующим образом:

  • Шифрование конфиденциальной информации в файле конфигурации службы.

  • Блокировка элементов в файле конфигурации, чтобы вложенные подкаталоги службы не переопределили параметры.

  • Контроль регистрации персонально идентифицируемой информации (PII) в журналах трассировки и сообщений.

Обсуждение

Каждая из этих функций может использоваться отдельно или совместно для управления аспектами безопасности службы. Это не окончательное руководство по защите службы WCF.

Файлы конфигурации .NET Framework могут содержать конфиденциальную информацию, например строки подключения для подключения к базам данных. В общих сценариях, размещенных в Интернете, может потребоваться зашифровать эти сведения в файле конфигурации для службы, чтобы данные, содержащиеся в файле конфигурации, были устойчивы к случайному просмотру. .NET Framework 2.0 и более поздних версий имеет возможность шифровать части файла конфигурации с помощью интерфейса программирования приложения Защиты данных Windows (DPAPI) или поставщика шифрования RSA. aspnet_regiis.exe с помощью DPAPI или RSA может шифровать выбранные части файла конфигурации.

В сценариях, размещенных в Интернете, можно использовать службы в подкаталогах других служб. Семантика по умолчанию для определения значений конфигурации позволяет файлам конфигурации в вложенных каталогах переопределить значения конфигурации в родительском каталоге. В некоторых ситуациях это может быть нежелательным по различным причинам. Конфигурация службы WCF поддерживает блокировку значений конфигурации, поэтому вложенная конфигурация создает исключения при запуске вложенной службы с использованием переопределенных значений конфигурации.

В этом примере показано, как управлять ведением журнала известных личных сведений (PII) в журналах трассировки и сообщений, таких как имя пользователя и пароль. По умолчанию ведение журнала известных персональных данных отключено, однако в некоторых ситуациях ведение журнала piI может быть важным при отладке приложения. Этот пример основан на Кратком руководстве. Кроме того, в этом примере используется трассировка и журналирование сообщений. Для получения дополнительной информации см. пример трассировки и ведения журналов сообщений.

Шифрование элементов файла конфигурации

В целях безопасности в общей среде размещения веб-сайтов может потребоваться зашифровать определенные элементы конфигурации, такие как строки подключения к базе данных, которые могут содержать конфиденциальную информацию. Элемент конфигурации может быть зашифрован с помощью средства aspnet_regiis.exe, найденного в папке .NET Framework, например, %WINDIR%\Microsoft.NET\Framework\v4.0.20728.

Чтобы зашифровать значения в разделе appSettings в Web.config для примера

  1. Откройте командную строку через Пуск-Выполнить>.... Введите cmd и нажмите ОК.

  2. Перейдите к текущему каталогу .NET Framework, выполнив следующую команду: cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728

  3. Зашифруйте параметры конфигурации appSettings в папке Web.config, выполнив следующую команду: aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider"

Дополнительные сведения о шифровании разделов файлов конфигурации можно найти, прочитав инструкции по DPAPI в конфигурации ASP.NET (создание безопасных приложений ASP.NET: проверка подлинности, авторизация и безопасная связь) и инструкции по RSA в конфигурации ASP.NET (Практическое руководство. Шифрование разделов конфигурации в ASP.NET 2.0 с помощью RSA).

Блокировка элементов файла конфигурации

В сценариях, размещенных в Интернете, можно использовать службы в подкаталогах служб. В таких ситуациях значения конфигурации службы в подкаталоге вычисляются путем проверки значений в Machine.config и последовательном слиянии с любыми файлами Web.config в родительских каталогах, перемещающихся вниз по дереву каталогов, и, наконец, слиянием файла Web.config в каталоге, содержащем службу. Поведение по умолчанию для большинства элементов конфигурации — разрешить файлам конфигурации в подкаталогах переопределить значения, заданные в родительских каталогах. В некоторых ситуациях может потребоваться запретить файлам конфигурации в подкаталогах переопределять значения, заданные в конфигурации родительского каталога.

Платформа .NET Framework предоставляет способ блокировки элементов файла конфигурации, чтобы конфигурации, которые переопределяют заблокированные элементы конфигурации, вызывали исключения среды выполнения.

Элемент конфигурации можно заблокировать, указав lockItem атрибут узла в файле конфигурации, например, чтобы заблокировать узел CalculatorServiceBehavior в файле конфигурации, чтобы службы калькулятора в вложенных файлах конфигурации не могли изменить поведение, можно использовать следующую конфигурацию.

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

Блокировка элементов конфигурации может быть более конкретной. Список элементов можно указать в качестве значения для lockElements, чтобы зафиксировать набор элементов в составе коллекции дочерних элементов. Список атрибутов можно указать в качестве значения для lockAttributes блокировки набора атрибутов в элементе. Можно заблокировать всю коллекцию элементов или атрибутов, за исключением указанного списка, указав атрибуты lockAllElementsExcept или lockAllAttributesExcept на узле.

Конфигурация ведения журнала PII

Ведение журнала персональных данных управляется двумя коммутаторами: параметр на уровне компьютера, найденный в Machine.config, позволяющий администратору компьютера разрешать или запрещать ведение журнала личных данных и параметр приложения, позволяющий администратору приложения переключать ведение журнала персональных данных для каждого источника в Web.config или App.config файле.

Параметр на уровне компьютера управляется путем установки enableLoggingKnownPii на true или false в элементе machineSettings в Machine.config. Например, следующее позволяет приложениям включать ведение журнала персональных данных.

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

Замечание

Файл Machine.config имеет расположение по умолчанию: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.

Если атрибут enableLoggingKnownPii отсутствует в Machine.config, ведение журнала ПИИ запрещено.

Включение ведения журнала PII для приложения выполняется путем задания атрибута исходного элемента logKnownPiitruefalse в файле Web.config или App.config. Например, в следующем случае можно включить ведение журнала piI как для ведения журнала сообщений, так и для ведения журнала трассировки.

<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 Если атрибут не указан, ЛИЧНЫЕ данные не регистрируются.

PII регистрируется только в том случае, если для обоих параметров enableLoggingKnownPii задано значение true, и logKnownPii – значение true.

Замечание

System.Diagnostics игнорирует все атрибуты во всех источниках, кроме первого, указанного в файле конфигурации. Добавление атрибута logKnownPii во второй источник в файле конфигурации не влияет.

Это важно

Для запуска этого примера необходимо вручную изменить Machine.config. Следует проявлять осторожность при изменении Machine.config, так как неправильные значения или синтаксис могут привести к тому, что все приложения .NET Framework не будут работать.

Кроме того, можно шифровать элементы файла конфигурации с помощью DPAPI и RSA. Дополнительные сведения см. по следующим ссылкам.

Чтобы настроить, собрать и запустить пример

  1. Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.

  2. Отредактируйте Machine.config для установки атрибута enableLoggingKnownPii как true, добавляя родительские узлы, если это необходимо.

  3. Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .

  4. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".

Очистить образец

  1. Измените Machine.config, чтобы задать для атрибута enableLoggingKnownPii значение false.

См. также