Поделиться через


Защита состояния сеанса

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

Состояние сеанса ASP.NET позволяет сохранять и извлекать значения для пользователя, когда пользователь переходит на другие страницы ASP.NET, составляющие веб-приложение. Состояние сеанса ASP.NET определяет запросы, полученные от браузера в течение ограниченного периода времени (сеанса), и предоставляет возможность сохранения значений переменных в течение этого сеанса. Сеансы обозревателя идентифицируются в файле Cookie сеанса или в URL-адресе, если состояние сеанса указано без применения файлов Cookie.

Состояния сеансов ASP.NET по умолчанию активированы во всех приложениях ASP.NET и настроены на использование файлов Cookie сеансов (для идентификации сеансов обозревателя).

Состояние сеанса ASP.NET по умолчанию сохраняет значения переменных сеанса в памяти, но также доступна возможность настройки состояния сеанса и хранения переменных сеанса на постоянном сервере, сервере SQL или в хранилище сеансов.

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

Можно найти более подробные сведения о рекомендациях для написания безопасного кода и защите приложений в книге "Writing Secure Code" авторов Michael Howard и David LeBlanc и в руководстве, предоставляемом Microsoft Patterns and Practices (https://www.microsoft.com/resources/Practices/default.mspx).

Безопасность конфигурации состояния сеансов

Функция состояния сеансов включена по умолчанию. Хотя стандартные параметры конфигурации устанавливаются в наиболее безопасные значения, необходимо отключить состояния сеансов, если они не требуются в приложении. Сведения о параметрах конфигурации состояния сеансов и их значения по умолчанию содержатся в разделе Элемент sessionState (схема параметров ASP.NET).

Защита значений параметров настройки

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

Обеспечение безопасности подключений к источнику данных состояния сеансов

Строки подключения

Как упоминалось ранее, важно защитить важные данные, которые хранятся в строке соединения для доступа к SQL Server, службе состояний сеансов, других источниках данных. Чтобы защитить подключение к серверу базы данных, рекомендуется зашифровать строку соединения в файле конфигурации с помощью защищенной конфигурации. Дополнительные сведения см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.

Подключение к SQL Server с помощью встроенных средств безопасности

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

Защита ИД сеанса

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

  • Защиту приложений при помощи Secure Sockets Layer (SSL).

  • Указание малого значения для сеанса: Timeout. Также следует учесть перенаправление клиента, которое содержит время, аналогичное времени ожидания сеанса при использовании сценария клиента, или добавление заголовка обновления при помощи метода AddHeader (см. пример далее).

    Response.AddHeader("Refresh", Session.Timeout & ";URL=Logoff.htm"
    Response.AddHeader("Refresh", Session.Timeout + ";URL=Logoff.htm";
    
  • Не используйте сеансы без Cookie. При использовании таких сеансов предупредите пользователей о невозможности использования электронных адресов, закладок или сохранения ссылок, которые содержат ИД сеанса.

  • Не указывайте режимы использования Cookie AutoDetect и UseDeviceProfile.

  • Разрешайте выход пользователей, при этом вызывая метод HttpSessionState.Abandon. Предупреждайте пользователей о необходимости закрытия обозревателя после выхода.

  • При использовании сеансов без Cookie настройте regenerateExpiredSessionID в значение true, чтобы всегда начинать новый сеанс после получения идентификатора окончания сеанса.

Безопасность веб-страниц, которые используют состояние сеанса

Страницы приложения, которые имеют отношение к важной информации, должны быть защищены при помощи стандартных инструментов безопасности, например SSL; пользователи, осуществляющие важные действия (обновление личных данных или удаление учетных записей), должны войти в систему.

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

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

Исключения

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

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

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

Собственные поставщики хранилищ состояний сеансов

При создании пользовательского поставщика хранилищ состояний сеансов убедитесь, что выполнены все рекомендации по обеспечению безопасности, чтобы избежать атак, например, SQL Injection, при работе с базой данных. При использовании поставщика хранилища состояний сеансов убедитесь, что поставщик следует рекомендациям по обеспечению безопасности.

См. также

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

Общие сведения о состоянии сеанса ASP.NET

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

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