Блокировка безопасности PII
В примере SecurityLockdown показано, как управлять несколькими функциями, связанными с безопасностью службы Windows Communication Foundation (WCF), следующим образом:
Шифрование конфиденциальных сведений в файле конфигурации службы.
Блокировка элементов файла конфигурации службы, не позволяющая переопределять параметры во вложенных подкаталогах службы.
Управление отображением персональных данных в трассировках и журналах сообщений.
Обсуждение
С помощью этих функций можно управлять безопасностью службы, используя их вместе либо по отдельности. Это не окончательное руководство по защите службы WCF.
Файлы конфигурации .NET Framework могут содержать конфиденциальную информацию, например строки подключения, используемые для подключения к базам данных. При размещении на веб-сервере с общим доступом может потребоваться зашифровать эту информацию в файле конфигурации службы, чтобы защитить ее от просмотра стандартными средствами. В платформе .NET Framework 2.0 и более поздних версиях предусмотрена возможность шифрования разделов файла конфигурации с помощью API защиты данных Windows (DPAPI) или поставщика служб шифрования RSA. Приложение aspnet_regiis.exe, использующее DPAPI или RSA, позволяет зашифровать указанные разделы файла конфигурации.
При размещении на веб-сервере можно реализовывать службы в подкаталогах других служб. Семантика определения значений параметров конфигурации, используемая по умолчанию, позволяет переопределять в файлах конфигурации, расположенных во вложенных каталогах, значения параметров конфигурации, указанные в родительском каталоге. В некоторых ситуациях это может быть нежелательно по различным причинам. Конфигурация службы WCF поддерживает блокировку значений конфигурации, поэтому вложенная конфигурация создает исключения при запуске вложенной службы с использованием переопределенных значений конфигурации.
В этом образце демонстрируется, как при трассировке и ведении журналов сообщений управлять регистрацией персональных данных (PII), например имен пользователей и паролей. По умолчанию регистрация личной информации отключена. Впрочем, в некоторых ситуациях ее требуется включить в целях отладки приложения. Этот пример основан на начале работы. Кроме того, в нем используется аналогичная система трассировки и журнала сообщений. Дополнительные сведения см. в примере журнала трассировок и сообщений.
Шифрование элементов файла конфигурации
При размещении службы на веб-сервере с общим доступом может потребоваться зашифровать некоторые элементы файла конфигурации в целях безопасности, например строки для подключения к базам данных, в которых может содержаться конфиденциальная информация. Элемент конфигурации может быть зашифрован с помощью средства aspnet_regiis.exe, найденного в папке платформа .NET Framework, например %WINDIR%\Microsoft.NET\Framework\v4.0.20728.
Шифрование значений в разделе appSettings файла Web.config для данного образца
Откройте командную строку с помощью start-Run>.... Введите и
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. Например, в следующих случаях приложения могут включать ведение журнала персональных данных.
<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 вручную. Необходимо соблюдать осторожность при изменении этого файла, поскольку неправильные значения и синтаксические ошибки могут сделать невозможной работу всех приложений на базе .NET Framework.
Также можно зашифровывать элементы файла конфигурации с помощью DPAPI и RSA. Дополнительные сведения см. по следующим ссылкам.
Создание безопасных приложений ASP.NET: проверка подлинности, авторизация и безопасная связь
Практическое руководство. Шифрование разделов конфигурации в ASP.NET 2.0 с помощью RSA
Настройка, построение и выполнение примера
Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.
Измените файл Machine.config, присвоив атрибуту
enableLoggingKnownPii
значениеtrue
и добавив родительские узлы при необходимости.Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Building the Windows Communication Foundation Samples.
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".
Очистка после образца
- Измените файл Machine.config, присвоив атрибуту
enableLoggingKnownPii
значениеfalse
.