Защита свойств профиля
Обновлен: Ноябрь 2007
Можно использовать функцию профиля ASP.NET сохранять и извлекать пользовательские параметры из источника данных, такого как база данных. Необходимо указать свойства и группы, формирующие пользовательские профили в файле конфигурации приложения. Во время выполнения ASP.NET использует данные о конфигурации для динамического создания класса со строго типизированными методами доступа для каждого свойства профиля. Этот класс затем предоставляется с помощью статического свойства Profile. Значения свойства профиля сохраняются поставщиком профилей в источнике данных либо в виде XML с открытым текстом, либо в сериализованной двоичной форме.
Безопасность приложения можно улучшить с помощью нижеследующего кода и рекомендаций по конфигурации. Также важно постоянно обновлять веб-сервер с помощью последних обновлений средств защиты для Microsoft Windows и Microsoft Internet Information Services (IIS), а также любых обновлений безопасности для Microsoft SQL Server или других источников данных профиля.
Более подробные сведения и рекомендации по написанию безопасного кода и защите приложений приведены в книге Защищенный код Майкла Ховарда и Дэвида Леблана, а также в советах "Шаблоны и методики Майкрософт" (https://www.microsoft.com/resources/practices/default.mspx).
Конфигурация безопасного профиля
Функция профиля ASP.NET включена по умолчанию. Хотя параметры конфигурации по умолчанию заданы значениями, соответствующими наивысшей безопасности, рекомендуется отключить функцию пользовательского профиля, если она не нужна для приложения. Сведения о параметрах конфигурации профиля и их значениях по умолчанию см. в разделе Элемент profile (схема параметров ASP.NET). Анонимная идентификация, которая может быть задана для свойств профиля, отключена по умолчанию. Дополнительные сведения о параметрах конфигурации анонимной идентификации и их значениях по умолчанию см. в разделе Элемент anonymousIdentification (схема параметров ASP.NET).
Настройка параметров системы безопасности
При сохранении конфиденциальных сведений в файле конфигурации рекомендуется зашифровать важные значения с помощью защищенной конфигурации. К особо конфиденциальным сведениям относятся ключи шифрования, хранящиеся в элементе конфигурации machineKey, и строки подключений к источнику данных, хранящиеся в элементе конфигурации connectionStrings. Дополнительные сведения см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.
Безопасные подключения к источнику данных профиля
Строки подключения
Как было отмечено, защита особо важной информации, хранящейся в строке подключения, используемой для взаимодействия с компьютером, использующим SQL Server или другой источник данных, является очень важным аспектом. Чтобы обеспечить безопасность подключения к серверу базы данных, рекомендуется зашифровать информацию о строке подключения в конфигурации, используя защищенную конфигурацию. Дополнительные сведения см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.
Подключение к SQL Server с помощью встроенных средств безопасности
Для подключения к компьютерам, использующим SQL Server, рекомендуется применять встроенную безопасность, чтобы избежать возможного рассекречивания строки подключения, идентификатора пользователя и предоставляемого пароля. При указании подключения, использующего встроенную безопасность, для подключения к компьютеру, работающему под управлением SQL Server, поставщик профиля возвращается к идентификации процесса. Рекомендуется, чтобы идентификация процесса (например, пула приложения), который выполняет ASP.NET, являлась учетной записью процесса по умолчанию или ограниченной учетной записью пользователя. Дополнительные сведения см. в разделе Олицетворение ASP.NET.
Права доступа к базе данных SQL Server
База данных SQL Server, которая используется по умолчанию для хранения сведений о профиле, включает роли базы данных и представления, которые позволяют ограничить доступ пользователей только правами, требуемыми для приложения. Идентификатору пользователя, который подключается к базе данных профиля SQL Server, рекомендуется назначать минимально необходимые права. Дополнительные сведения см. в разделе Роли и представления в Application Services Database для SQL Server.
Защита конфиденциальных данных в источнике данных профиля
Поставщик пользовательского профиля по умолчанию не шифрует значения, хранящиеся в источнике данных профиля. Рекомендуется шифровать любую конфиденциальную информацию перед ее сохранением в источнике данных профиля во избежание ее рассекречивания при несанкционированном доступе к источнику данных. Перед сохранением значения в свойстве профиля можно зашифровать конфиденциальные данные или расширить классы ProfileBase или ProfileProvider для предоставления возможностей шифрования.
Защита данных анонимного профиля от совместного использования несколькими приложениями
Если для приложения или свойств профиля, используемых этим приложением, включена анонимная идентификация, существует опасность раскрытия значений свойств анонимного профиля другому приложению. Это может происходить, когда атрибуту анонимной идентификации cookiePath задан путь, включающий несколько приложений, и когда несколько приложений находятся в общем домене.
При использовании анонимной идентификации с пользовательскими профилями и намерении выделить анонимных пользователей среди приложений, рекомендуется указать отдельные ключи шифрования в элементе machineKey для каждого приложения, задать область анонимной идентификации Cookie для конкретного приложения и задать свойству ApplicationName различные значения для каждого приложения.
Защита веб-страниц, использующих пользовательские профили
Страницы приложений, работающие с конфиденциальными данными, хранящимися в свойствах профиля, должны быть защищены с помощью стандартных механизмов веб-безопасности. Это включает в себя использование Secure Sockets Layer (SSL) и требование от пользователей входа в систему для выполнения конфиденциальных операций, например обновления сведений о пользователях или удаления пользователей. Кроме того, не следует хранить конфиденциальные данные в файлах Cookie.
Обеспечение безопасности при атаках типа "отказ в обслуживании"
Методы классов ProfileManager, выполняющие обновления или операции поиска длительного выполнения, могут уменьшить время реакции профиля источника данных при одновременном вызове методов большим числом клиентов. Для уменьшения уязвимости приложения перед атаками типа "отказ в обслуживании" необходимо разрешить доступ к страницам ASP.NET, обновляющим базу данных или занимающихся поиском, связанным с профилями, только пользователям с правами администратора.
Сообщения об ошибках и события
Исключения
Чтобы предотвратить предоставление конфиденциальных сведений, настройте приложение так, чтобы оно либо не отображало подробные сообщения об ошибках, либо отображало подробные сообщения об ошибках, только если приложение запускается локально на веб-сервере. Дополнительные сведения см. в описании элемента конфигурации customErrors.
Журнал событий
Функция профиля ASP.NET записывает данные для условий конкретной ошибки с помощью наблюдения за состоянием системы ASP.NET, которая по умолчанию сохраняет информацию в журнале событий. Если серверный компьютер работает под управлением Windows Server 2003, то можно повысить безопасность приложения путем настройки журнала событий и установки параметров, касающихся размера, сохранности и т. д., из журнала событий, чтобы предотвратить косвенные атаки типа "отказ в обслуживании".
Данные трассировки
Веб-сервер можно настроить для отслеживания возникновения определенных действий, касающихся функции профиля и сохранения информации трассировки в файле журнала. Так как конфиденциальные сведения, например имена пользователей и имена ролей, могут храниться в файле журнала трассировки, рекомендуется разрешить доступ к возможности включения трассировки, а также настройки расположения файла журнала трассировки и доступа к нему только для администраторов.
Поставщики пользовательского профиля
При создании поставщика пользовательского профиля для доступа к базе данных убедитесь, что выполнены все рекомендации по обеспечению безопасности, чтобы избежать атак, таких как SQL Injection. При использовании поставщика пользовательских профилей убедитесь, что поставщик следует рекомендациям по обеспечению безопасности.
См. также
Основные понятия
Общие сведения о свойствах профилей ASP.NET