Защита членства
Обновлен: Ноябрь 2007
Членство ASP.NET предоставляет функциональные возможности для управления и проверки подлинности пользователей и наиболее часто используется с проверкой подлинности форм и элементов управления, таких как Login, LoginView, LoginStatus, LoginName, PasswordRecovery и CreateUserWizard. В этом разделе описываются рекомендации в настройке веб-узлов и программировании классов членства для оптимизации безопасности членства.
Следующие рекомендации могут помочь повысить безопасность приложений, также важно постоянно обновлять сервер приложений последними обновлениями средств защиты для Microsoft Windows и Internet Information Services (IIS), а также вносить все исправления для Microsoft SQL Server или других источников данных членства.
Можно найти более подробные сведения о рекомендациях для написания безопасного кода и защите приложений в книге "Writing Secure Code" авторов Michael Howard и David LeBlanc и в руководстве, предоставляемом Microsoft Patterns and Practices (https://www.microsoft.com/resources/practices/default.mspx).
Настройка безопасности членства
Средство членства включено по умолчанию для приложений ASP.NET и не может быть отключено. По умолчанию параметры конфигурации заданы наиболее безопасными значениями. Сведения о параметрах конфигурации членства и их значения по умолчанию содержатся в разделе Элемент membership (схема параметров ASP.NET). Следует задать атрибут requiresQuestionAndAnswer в значение true, особенно если enablePasswordReset или enablePasswordRetrieval также true.
Настройка параметров системы безопасности
При сохранении конфиденциальных сведений в файле конфигурации приложения следует зашифровать конфиденциальные значения, используя защищенную конфигурацию. К особо конфиденциальным сведениям относятся ключи шифрования, хранящиеся в элементе конфигурации machineKey, и строки подключений к источнику данных, хранящиеся в элементе конфигурации connectionStrings. Дополнительные сведения см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.
Обеспечение безопасности ключей шифрования и хеширование
Настоятельно рекомендуется зашифровать пароли пользователей в источнике данных членства с помощью задания атрибута passwordFormat в значение Hashed или Encrypted, где Hashed является наиболее безопасным форматом. Значения ключа шифрования для определенного алгоритма шифрования хранятся в элементе конфигурации machineKey. Для надежного шифрования укажите ключ шифрования, который является случайно сгенерированным значением соответствующей длины для выбранного алгоритма шифрования.
На сервере, размещающем несколько приложений, рекомендуется определить ключи шифрования, уникальные для каждого приложения. Менее безопасной альтернативой является определение одного ключа шифрования и указание для ключа параметра IsolateApps.
Можно установить настройки компьютера на сервере узла, чтобы запретить приложениям переопределять параметры конфигурации. Сюда относится запрет на переопределение ключей шифрования в файле Web.config для приложения.
Обеспечение безопасности подключений к источнику данных членства
Строки подключения
Чтобы обеспечить безопасность подключения к серверу базы данных, следует зашифровать информацию о строке подключения в конфигурации, используя защищенную конфигурацию. Дополнительные сведения см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.
Подключение к SQL Server с помощью встроенных средств безопасности
Для подключения к компьютерам с SQL Server следует использовать встроенные средства безопасности, чтобы избежать вероятности рассекречивания строки подключения, идентификатора пользователя и предоставляемого пароля. При указании подключения, которое использует встроенную безопасность для подключения к компьютеру, работающему под управлением SQL Server, функция членства обращается к идентификации процесса. Следует убедиться, что идентификатор процесса (например пула приложений), на котором выполняется ASP.NET, является учетной записью процесса по умолчанию или ограниченной учетной записью пользователя. Дополнительные сведения см. в разделе Олицетворение ASP.NET.
Разрешения базы данных SQL Server
База данных SQL Server, которая используется для хранения сведений членства, включает роли базы данных и представления, которые позволяют ограничить доступ пользователей только требуемыми возможностями и видимостью. Идентификатору пользователя, который подключается к базе данных SQL Server членства, следует назначить минимальные необходимые полномочия. Дополнительные сведения см. в разделе Роли и представления в Application Services Database для SQL Server.
Идентификация рабочего процесса SQL Server, экспресс-выпуск
SQL Server, экспресс-выпуск 2005 включает новый режим работы, который может запустить рабочий процесс как идентификатор подключающегося пользователя. Эту возможность называют режимом "запуск от имени". Хотя этот режим работы является подходящим для разработки настольных приложений с использованием IIS, запуск рабочих процессов не допускается на веб-серверах, размещающих множественные основания кода ненадежного клиента. Общие размещения серверов, содержащих приложения, которые не доверяют друг другу, должны явно отключить функциональность "запуска от пользователя". Эту функцию можно отключить, подключившись к экземпляру SQL, экспресс-выпуск (например osql –E –S .\sqlexpress) и выполнив следующую команду Transact-SQL:
EXEC sp_configure 'show advanced option', '1'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'user instances enabled', 0
GO
RECONFIGURE WITH OVERRIDE
GO
Безопасность веб-страниц, которые используют членство
Следует обеспечить безопасность страниц приложений, работающих с конфиденциальными данными (например страниц входа в систему) с помощью стандартных механизмов веб-безопасности. Они включают такие меры, как использование Secure Sockets Layer (SSL) и требование от пользователей входа в систему для выполнения конфиденциальных операций, например обновления сведений о пользователях или удаление пользователей.
Кроме того, на страницах не должны открыто отображаться конфиденциальные данные, такие как пароли и, в некоторых случаях, имена пользователей. Убедитесь, что на страницах, где отображаются такие сведения, используется протокол SSL. Кроме того, они должны быть доступны только для пользователей, прошедших проверку подлинности. Избегайте хранения конфиденциальных данных в файлах Cookie или передачи их через небезопасные подключения.
Обеспечение безопасности при атаках отказа в обслуживании
Методы, выполняющие обновления или объемные операции поиска, могут уменьшить время реакции источника данных членства при одновременном вызове большим числом клиентов. Для снижения риска атаки типа "отказ в обслуживании" ограничьте доступ к страницам ASP.NET, что позволит использовать методы, выполняющие обновление базы данных или поиск для административных пользователей, и предоставьте только те страницы ASP.NET, которые предоставляют проверку и управление паролями для общего использования.
Сообщения об ошибках и события
Исключения
Для предотвращения отображения конфиденциальных сведений нежелательным источникам настройте приложение таким образом, чтобы оно либо не отображало подробные сообщения об ошибках, либо отображало подробные сообщения об ошибках, только если клиентом является сам веб-сервер. Дополнительные сведения см. в разделе Элемент customErrors (схема параметров ASP.NET).
Журнал событий
Если сервер работает под управлением Windows Server 2003, то можно повысить безопасность приложения путем настройки журнала событий и установки параметров, касающихся размера, сохранности и т. д., из журнала событий, чтобы предотвратить косвенные атаки типа "отказ в обслуживании".
Наблюдение за работоспособностью
Успешные и неудачные попытки входа регистрируются с использованием средства наблюдения за работоспособностью ASP.NET. В конфигурации по умолчанию это означает, что при неудачной попытке входа в систему в журнал событий приложений будет записано имя пользователя и другая диагностическая информация. Убедитесь, что доступ к журналу событий ограничен для конфиденциальности этих сведений.
Пользовательские поставщики членства
При создании пользовательского поставщика членства, убедитесь, что выполнены все рекомендации по обеспечению безопасности, чтобы при работе с базой данных избежать атак, например SQL Injection. При использовании пользовательского поставщика членства убедитесь, что поставщик следует рекомендациям по обеспечению безопасности.
Работа с символами, зависящими от языка и региональных параметров
При использовании поставщика членства SQL Server или пользовательского поставщика членства источник данных может быть настроен для хранения данных членства в формате с учетом языка и региональных параметров. Однако ASP.NET вычисляет имена пользователей из элемента конфигурации авторизации, а имена пользователей из данных членства хранятся как независящие от языка и региональных параметров. В результате, поскольку имя пользователя будет считаться нейтральным к языку и региональным параметрам, неавторизованный пользователь может получить авторизацию, если имеет такое же имя, как авторизованный пользователь.
Чтобы избежать получения несанкционированного доступа, убедитесь, что имена пользователей являются уникальными при вычислении их как независящих от языка и региональных параметров. Кроме того, можно указать только имена ролей для авторизации с помощью элемента конфигурации авторизация и убедиться, что имена ролей уникальны при вычислении их как нейтральных к языку и региональным параметрам. Указание авторизации с использованием имен ролей часто предпочтительно, поскольку создание и управление ролями может быть ограничено в виде административной функции.