Блокировка безопасности PII
В этом образце показано, как управлять некоторыми функциями безопасности службы Windows Communication Foundation (WCF), используя следующие приемы:
Шифрование конфиденциальных сведений в файле конфигурации службы.
Блокировка элементов файла конфигурации службы, не позволяющая переопределять параметры во вложенных подкаталогах службы.
Управление отображением персональных данных в трассировках и журналах сообщений.
![]() |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\WF_WCF_Samples
Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.
<диск_установки>:\WF_WCF_Samples\WCF\Basic\Management\SecurityLockdown
|
Обсуждение
С помощью этих функций можно управлять безопасностью службы, используя их вместе либо по отдельности. Это руководство не является нормативной инструкцией по обеспечению безопасности службы WCF.
Файлы конфигурации .NET Framework могут содержать конфиденциальную информацию, например строки подключения, используемые для подключения к базам данных. При размещении на веб-сервере с общим доступом может потребоваться зашифровать эту информацию в файле конфигурации службы, чтобы защитить ее от просмотра стандартными средствами. В платформе .NET Framework 2.0 и более поздних версиях предусмотрена возможность шифрования разделов файла конфигурации с помощью API защиты данных Windows (DPAPI) или поставщика служб шифрования RSA. Приложение aspnet_regiis.exe, использующее DPAPI или RSA, позволяет зашифровать указанные разделы файла конфигурации.
При размещении на веб-сервере можно реализовывать службы в подкаталогах других служб. Семантика определения значений параметров конфигурации, используемая по умолчанию, позволяет переопределять в файлах конфигурации, расположенных во вложенных каталогах, значения параметров конфигурации, указанные в родительском каталоге. В некоторых ситуациях такая возможность может быть нежелательна по различным причинам. WCF поддерживает возможность блокировки некоторых значений в конфигурации службы, в результате которых выдаются исключения при попытке запуска службы из вложенного каталога, использующей переопределенные значения параметров конфигурации.
В этом образце демонстрируется, как при трассировке и ведении журналов сообщений управлять регистрацией персональных данных (PII), например имен пользователей и паролей. По умолчанию регистрация личной информации отключена. Впрочем, в некоторых ситуациях ее требуется включить в целях отладки приложения. Этот образце основан на примере Образец для начала работы. Кроме того, в нем используется аналогичная система трассировки и журнала сообщений. Дополнительные сведения см. в образце Трассировка и ведение журнала сообщений.
Шифрование элементов файла конфигурации
При размещении службы на веб-сервере с общим доступом может потребоваться зашифровать некоторые элементы файла конфигурации в целях безопасности, например строки для подключения баз данных, в которых может содержаться конфиденциальная информация. Элементы конфигурации можно зашифровать с помощью программного средства aspnet_regiis.exe, расположенного в папке .NET Framework (например, «%WINDIR%\Micrsoft.NET\Framework\v4.0.20728»).
Шифрование значений в разделе appSettings файла Web.config для данного образца
Откройте консоль командной строки, выбрав Пуск ->Выполнить…. Введите cmd и нажмите кнопку ОК.
Перейдите в каталог текущей версии .NET Framework с помощью следующей команды:
cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728
.Зашифруйте параметры конфигурации 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. Например, следующий код позволяет приложениям включить журнал PII.
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true" />
</system.serviceModel>
</configuration>
![]() |
---|
Расположение по умолчанию для файла Machine.config: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG. |
Если в файле Machine.config отсутствует атрибут enableLoggingKnownPii, регистрация персональных данных запрещена.
Регистрация персональных данных для приложения регулируется значением атрибута logKnownPii исходного элемента: true или false (в файле Web.config или App.config). Например, следующая конфигурация разрешает регистрацию персональных данных как в журналах сообщений, так и в журналах трассировок.
<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 не указан, регистрация персональных данных отключена.
Персональные данные регистрируются только если атрибут enableLoggingKnownPii имеет значение true, и атрибут logKnownPii также имеет значение true.
![]() |
---|
Модуль System.Diagnostics игнорирует все атрибуты всех источников, за исключением приведенного в файле конфигурации первым. Добавление атрибута logKnownPii во второй источник в файле конфигурации не на что не повлияет. |
![]() |
---|
Чтобы выполнить этот образец, необходимо вручную модифицировать файл Machine.config. Вносить изменения в файл Machine.config следует осторожно, так как неверные значения или синтаксис могут нарушить работу приложений .NET Framework. |
Также можно зашифровывать элементы файла конфигурации с помощью DPAPI и RSA. Дополнительные сведения см. на следующих страницах:
Настройка, построение и выполнение образца
Убедитесь, что выполнены процедуры, описанные в разделе Процедура однократной настройки образцов Windows Communication Foundation.
Измените файл Machine.config, присвоив атрибуту enableLoggingKnownPii значение true и добавив родительские узлы при необходимости.
Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Построение образцов Windows Communication Foundation.
Чтобы запустить образец на одном или нескольких компьютерах, следуйте инструкциям в разделе Running the Windows Communication Foundation Samples.
Очистка после образца
- Измените файл Machine.config, присвоив атрибуту enableLoggingKnownPii значение false.