Настройка обеспечения безопасности ASP.NET

Обновлен: Ноябрь 2007

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

Приведенные здесь рекомендации в отношении конфигурации и кодировки помогут повысить безопасность приложений. Но не менее важно постоянно устанавливать на сервере приложения последние обновления средств защиты для Microsoft Windows и служб Microsoft Internet Information Services (IIS), а также все обновления для Microsoft SQL Server или другого программного обеспечения, обеспечивающего доступ к источникам данных.

Более подробные советы и рекомендации по написанию безопасного кода и защите приложений приведены в книге "Защищенный код" Майкла Ховарда и Дэвида Леблана, а также на веб-узле Шаблоны и методики Майкрософт (на английском языке).

ms178699.alert_caution(ru-ru,VS.90).gifВажное примечание.

Возможности системы конфигурации ASP.NET относятся только к ресурсам и возможностям ASP.NET. Для настройки ресурсов, не относящихся к ASP.NET, используйте возможности конфигурации служб IIS. Дополнительные сведения о настройке служб IIS см. в разделах Работа с метабазой (IIS 6.0) и Справочник свойств метабазы IIS.

Защита файла конфигурации

В следующей таблице представлены списки управления доступом (ACL), используемые по умолчанию в файле Machine.config file и корневом файле Web.config file, расположенных в каталоге %SystemRoot%\Microsoft.NET\Framework\версия\CONFIG. Эти списки управления доступом также используются для самого каталога, но в них включены разрешения на изменения для группы опытных пользователей. Каталог доступен только для чтения.

Учетная запись Windows

Разрешения

Администраторы

Полный доступ

Учетная запись компьютера ASP.NET (<server>\ASPNET)

Чтение и выполнение

IIS_WPG (<server>\IIS_WPG)

Чтение и выполнение

ЛОКАЛЬНАЯ СЛУЖБА

Чтение и выполнение

NETWORK SERVICE

Чтение и выполнение

Опытные пользователи (<сервер>\Power Users)

Изменение

SYSTEM

Полный доступ

Пользователи (<сервер>\Users)

Чтение и выполнение

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

Учетная запись Windows

Разрешения

Администраторы

Полный доступ

IIS_WPG (<сервер>\IIS_WPG)

Чтение и выполнение

ИНТЕРАКТИВНЫЕ

Чтение

Гостевая учетная запись Интернета (<сервер>\IUSR_<сервер>)

Чтение

СЕТЬ

Чтение

NETWORK SERVICE

Чтение

SYSTEM

Полный доступ

Пользователи (<server>\Users)

Чтение и выполнение

Учетная запись Средство администрирования веб-узла ASP.NET

Специальная учетная запись

В системе конфигурации ASP.NET использует списки управления доступом, заданные в файлах конфигурации вне зависимости от того, как редактируются параметры конфигурации. Дополнительные сведения см. в разделе Изменение файлов конфигурации ASP.NET.

Значения конфигурации безопасности

При сохранении конфиденциальных сведений в файле конфигурации приложения следует зашифровать конфиденциальные значения, используя защищенную конфигурацию. Особо конфиденциальные сведения включают ключи шифрования, хранящиеся в элементе конфигурации machineKey и строки подключений к источнику данных, хранящиеся в элементе конфигурации connectionStrings. Дополнительные сведения см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.

Защита конфигурации контейнеров ключа шифрования

Критическим вопросом при использовании ключа шифрования является защита файла, также называемого контейнером, в котором хранится ключ. Важно помнить уровень защиты, связанный с контейнером. Обратите внимание, что контейнер хранится в обычном файле операционной системы, а доступ к ключу шифрования регулируется списками управления доступом к файлу. Списки управления доступом могут наследоваться от папки, в которой создается файл. Контейнеры ключей с локальной областью действия (useMachineContainer"true") хранятся в скрытой папке %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys.

По умолчанию пользователь, создавший контейнер, обладает полным доступом к ключу. Другие пользователи (включая группу Администраторы) могут иметь или не иметь доступ к контейнеру, в зависимости от списков управления доступом контейнера. Другие пользователи могут получить доступ к контейнеру с помощью ключа –pa программы регистрации IIS для ASP.NET (Программа регистрации IIS для ASP.NET (Aspnet_regiis.exe)). Пользователи, пытающиеся зашифровать или расшифровать данные с указанным ключом, должны обладать требуемыми разрешениями для получения доступа к контейнеру ключа.

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

Тогда платформа .NET Framework создает необходимый ключ и соответствующий контейнер со списками управления доступом текущего пользователя. Потенциальная проблема при этом заключается в том, что пользователь с правами администратора может не получить доступ к контейнеру ключа шифрования. Администраторы могут получить доступ к ключу, получив владение физическим файлом в папке, указанной выше. Описанные рекомендации указывают на то, что пользователь с правами администратора должен создавать необходимые ключи перед их использованием, и тем самым избегать их создания во время шифрования.

Защита конфигурации в общей среде размещения

В общей среде размещения пользователи-злоумышленники могут изменить параметры конфигурации, напрямую редактируя файлы конфигурации, используя API конфигурации и другие средства администрирования и настройки. Предотвратить изменение конфигурации приложения можно путем блокировки разделов конфигурации. Сделать это можно, добавив элементы location в файл Machine.config или любой другой файл конфигурации, расположенные в иерархии выше, чем файл конфигурации, который необходимо защитить. Элемент location используется для предотвращения изменений параметров дочерних файлов конфигурации. Дополнительные сведения см. в разделах Пошаговое руководство. Отключение параметров конфигурации ASP.NET и Практическое руководство. Настройка отдельных каталогов с помощью параметров расположения.

Удаленная настройка

По умолчанию удаленная настройка отключена. Если она включена, проверка подлинности пользователя выполняется на уровне DCOM и только локальные администраторы обладают правом доступа для чтения и записи данных конфигурации. Дополнительные сведения см. в разделе Редактирование удаленных файлов конфигурации ASP.NET.

Пользовательские поставщики конфигурации

Вне зависимости от маркера безопасности текущего пользователя, пользовательский код обработки раздела выполняется с использованием учетной записи главного процесса. Для веб-сценариев используется учетная запись <server>\ASPNET для Windows 2000 и Windows XP, учетная запись сетевой службы для Windows Server 2003 или учетная запись пользователя, настраиваемая вручную. Для клиентских сценариев это процесс, который выполняется в текущее время.

Система конфигурации задает разрешения перед вызовом пользовательского обработчика раздела конфигурации, и этот вызов не имеет доверия для платформы .NET Framework. Вызов выполняется с разрешением доверия приложения. Система конфигурации ASP.NET доверяет каталогу %SystemRoot%\Microsoft.NET\Framework\версия\CONFIG, но не доверяет каталогам, расположенным ниже в иерархии.

Для получения разрешений пользовательский обработчик раздела конфигурации должен задавать атрибуты управления доступом для кода (CAS) по требованию. Дополнительные сведения см. в разделе Управление доступом для кода в ASP.NET или Основы управления доступом для кода.

Блокировка файла конфигурации

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

Использование API-конфигурации для чтения файлов произвольных файлов

Классы API-конфигурации не могут считывать каталоги, не являющиеся частью домена приложения, или файлы, расширение которых не .CONFIG.

Применение параметров метабазы IIS к запросам ASP.NET

Если IIS получает запрос на приложение ASP.NET, параметры метабазы IIS применяются к приложению ASP.NET вне зависимости от параметров конфигурации ASP.NET для этого приложения. Это ограничение может привести к тому, что приложения ASP.NET не будут доступны для пользователей или будут иметь меньшие ограничения доступа.

Например, если параметры безопасности метабазы IIS заданы таким образом, чтобы разрешать доступ только пользователям, прошедшим проверку подлинности, а параметры безопасности файла Web.config IIS разрешают анонимный доступ к узлу, то анонимные пользователи не получат доступ к узлу. Чтобы исправить это, следует в диспетчере служб IIS настроить для веб-приложения доступ анонимных пользователей.

Дополнительные сведения о защите возможностей служб IIS см. в разделе Безопасность в IIS 6.0.

Сообщения об ошибках и события

В следующих подразделах описано, как можно уменьшить потенциальные риски системы безопасности, создаваемые сообщениями неожиданных ошибок и событиями.

Исключения

Чтобы предотвратить предоставление конфиденциальных сведений нежелательным источникам, настройте приложение так, чтобы оно либо не отображало подробные сообщения об ошибках, либо отображало подробные сообщения об ошибках, если только клиентом является сам веб-сервер. Дополнительные сведения см. в разделе Элемент customErrors (схема параметров ASP.NET).

Журнал событий

Если сервер работает под управлением Windows Server 2003, то можно повысить безопасность приложения путем настройки журнала событий и установки параметров, касающихся размера, сохранности и других возможностей журнала событий, чтобы предотвратить косвенные атаки типа "отказ в обслуживании". Для получения дополнительных сведений о настройке журналов событий выполните в центре справки и поддержки Windows поиск по словосочетанию "просмотр событий" ("Event Viewer").

Наблюдение за работоспособностью

Успешные и неудачные попытки входа регистрируются с использованием средства наблюдения за работоспособностью ASP.NET. В конфигурации по умолчанию это означает, что при неудачной попытке входа в систему в журнал событий приложений записывается имя пользователя и другая диагностическая информация. Убедитесь, что доступ к журналу событий ограничен для обеспечения конфиденциальности этих сведений.

См. также

Основные понятия

Общие сведения о мониторинге работоспособности системы ASP.NET

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

Редактирование удаленных файлов конфигурации ASP.NET

Защита элементов управления входа

Обеспечение безопасности ролей

Защита членства

Безопасность доступа к данным

Другие ресурсы

Защита веб-узлов ASP.NET

Шифрование сведений о конфигурации с помощью функции защищенной конфигурации

Шифрование сведений о конфигурации с помощью функции защищенной конфигурации