Опубликован: 07.05.2010 | Уровень: для всех | Доступ: платный
Лекция 18:

Безопасность

< Лекция 17 || Лекция 18: 123456789
Аннотация: Аутентификация с помощью форм. Сертификаты. Настройка режима аутентификации форм. Хранение удостоверений в конфигурационном файле. Программное добавление пользователей в конфигурационный файл. Создание страницы регистрации. Хеширование паролей в Web.config. Закрепление за браузером постоянной аутентификации форм. Аутентификация с помощью API Membership. Создание хранилища удостоверений. Добавление в хранилище БД новых пользователей через утилиту WAT. Создание и удаление пользователей. Извлечение из хранилища списков пользователей. Конфигурирование поставщика SqlMembershipProvider. Обновление пользователей в хранилище.
Ключевые слова: защита информации, авторизация, слабое звено, источник сообщения, анонимный, шифрование данных, защита данных, учётная запись, Secure Sockets Layer, сокет, шифр, центр сертификации, Certification Authority, сертификация, сервер сертификатов, открытый ключ, ключ сеанса, симметричный ключ, закрытый ключ, секретный ключ, симметричное шифрование, конфигурационный файл, корневой каталог, мандат, cookie, анонимный доступ, ограничение доступа, свойство класса, Web.config, login, вход в систему, timeout, encryption, valid, SSL, domain-specific, хост, authenticity, i-mode, директива, поле ввода, валидатор, Panel, BorderStyle, 'ridge', display, dynamic, визуализация, tooltip, всплывающая подсказка, регулярное выражение, имя пользователя, управляющий символ, D-AMPS, Button, labels, открытый текст, уязвимость, хеширование, функция выходов, clearing, MD5, аутентификация пользователя, подкаталог, строка соединения, конфигурационный параметр, двойной щелчок, структуры баз данных, гиперссылка, хранимая процедура, admin, dialog, БД, UserName, UserID, первичный ключ, соединение с базой данных, управление пользователем, создание пользователя, базовый класс, поставщик данных, статические методы, DeleteUser, перегрузка, перегрузка метода, выходные параметры, провайдер, ASCII, GridView, DataField, hashing, comment, email

Аутентификация с помощью форм

Файлы к лекции Вы можете скачать здесь.

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

Основные задачи по защите сайта следующие:

  1. Аутентификация - опознавание источника сообщений по схеме "свой-чужой" с целью установить, является ли пользователь зарегистрированным на сайте или анонимным. Примером может служить проверка пропуска при входе в организацию
  2. Авторизация - определение уровня полномочий по допуску к важной информации и выполнению над ней определенных действий. Примером может быть допуск к определенным производствам или документации на предприятии
  3. Конфиденциальность - изоляция данных одного пользователя от любого вида доступа со стороны других пользователей. Обеспечивается с помощью шифрования данных в каналах связи и в местах постоянного или временного хранения
  4. Целостность - защита данных от изменений в результате неавторизованного вмешательства

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

Теперь при запросе ограниченного ресурса пользователь предъявит свое удостоверение, которое система верифицирует и примет решение: если удостоверение пользователя подтверждается, ему предоставляется доступ к Web-ресурсу, иначе будет предложена регистрация. Процесс аутентификации может выглядеть примерно так


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

  1. Аутентификация с помощью форм - поддерживается классом System.Web.Security.FormsAuthenticationModule
  2. Аутентификация Windows - поддерживается классом System.Web.Security.WindowsAuthenticationModule
  3. Аутентификация с помощью паспортов - поддерживается классом System.Web.Security.PassportAuthenticationModule
  4. Специализированная аутентификация - поддерживается внебиблиотечными классами сторонних производителей или самодельным классом

Системы коммуникации шифруются с помощью системы SSL (Secure Sockets Layer - уровень защищенных сокетов). Поскольку система SSL является службой IIS (Internet Information Services - службы информационной поддержки Internet) и работает под HTTP, то специально коммуникации нам шифровать не нужно - все пересылки шифрует сама служба. Единственное отличие - адрес запроса, защищенный SSL, начинается не с http://, а с https://. И трафик SSL проходит не через порт 80 для обычных запросов, а через порт 443.

Сертификаты

Обычно сервер, которому клиент собирается пересылать важные данные, маркируется сертификатом. Сертификат - это некоторый паспорт сервера, подтверждающий тот факт, что ему можно доверять. Организация, которой принадлежит сервер, приобретает сертификат у известного центра сертификации CA (Certificate Authority) и инсталирует его на своем Web-сервере.

Наиболее популярными центрами сертификации являются следующие сайты:

Инсталированный на сервере сертификат содержит следующую информацию:

  • Серийный номер сертификата
  • Имя, название организации и адрес держателя сертификата
  • Даты проверки сертификата
  • Открытый ключ, который будет рассылаться клиентам для шифрования симметричного ключа сеанса

Клиент (браузер) доверяет CA и поэтому готов доверять подписанной CA информации. В свою очередь, CA сохраняет информацию о каждом зарегистрированном пользователе. Начало работы по защищенному каналу связи начинается так:

  1. Браузер посылает запрос на соединение с сервером
  2. В ответ сервер присылает свой сертификат
  3. Браузер запрашивает из центра сертификации оригинал поступившего сертификата и сравнивает его с присланным сервером
  4. Если информация в сертификатах совпадает, браузер считает адресуемый сервер заслуживающим доверия и решается на соединение. Он генерирует случайным образом симметричный ключ шифрования подходящей для него длины, шифрует его присланным в сертификате открытым ключом и отсылает серверу
  5. Сервер получает от браузера зашифрованный ключ сеанса и расшифровывает его своим закрытым ключом. После этого у сервера и браузера есть одинаковый секретный ключ, с помощью которого они готовы применять симметричное шифрование к пересылаемой друг другу информации на протяжении всего текущего сеанса

Аутентификация форм

Аутентификация (распознавание) на основе форм реализуется в пространстве имен System.Web.Security классами:

  • FormsAuthenticationModule
  • FormsAuthentication
  • FormsAuthenticationEventArgs
  • FormsAuthenticationTicket
  • FormsIdentity

Выбор этого режима устанавливается только в одном единственном месте - конфигурационном файле web.config корневого каталога сайта с помощью элемента

<authentication mode="Forms" />

Аутентификацию форм можно выполнять и с помощью API-интерфейсов Membership и Roles (об этом позже).

Аутентификация форм основана на удостоверениях (мандатах), в которых хранится информация о зарегистрированном пользователе. Мандаты хранятся на сервере в базе данных зашифрованными и пересылаются при каждом запросе в cookie-наборах. ASP.NET при каждом запросе обрабатывает cookie-набор и задает по нему уровень безопасности запроса.

Для реализации аутентификации форм нужно выполнить следующее:

  • Настроить режим аутентификации форм в файле web.config
  • Настроить службу IIS для разрешения анонимного доступа к виртуальному каталогу
  • Настроить ASP.NET для ограничения доступа к защищенным каталогам
  • Создать страницу регистрации

Настройка режима аутентификации форм

В файле web.config виртуального корневого каталога сайта необходимо определить нужные параметры аутентификации, как свойства класса System.Web.Configuration.FormsAuthenticationConfiguration, из следующего набора:

Опции аутентификации форм в файле web.config
Опция Значение по умолчанию Описание
Name .ASPXAUTH Имя cookie-набора HTTP для использования в аутентификации. При работе на одном сервере нескольких приложений cookie-набору безопасности каждого приложения нужно задать уникальное имя для гарантированной их изоляции
LoginUrl login.aspx Определяет страницу регистрации пользователя при запросе защищенной страницы ( login - вход в систему)
Timeout 30 Время жизни cookie-набора безопасности в минутах. Если установлен режим скользящего устаревания и период между двумя соседними запросами не превысит этого таймаута, то ASP.NET обновит метку времени в cookie-наборе. Но если простой превысит установленный таймаут, будет затребована новая регистрация пользователя
SlidingExpiration false Включает режим скользящего устаревания cookie-набора безопасности. В этом режиме время устаревания при каждом запросе будет сбрасываться, если очередной простой не превысит указанное значение Timeout
Cookieless UseDeviceProfile Указывает способ пересылки удостоверения пользователя
Protection All Задает уровень безопасности cookie-наборов аутентификации:
  • None - не шифровать и не подписывать
  • Encryption - только шифровать
  • Validation - только подписывать
  • All - шифровать и подписывать
RequireSSL false При включении требует передачи через SSL. Если SSL не активирован на сервере, то аутентификация форм работать не будет
EnableCrossAppRedirects false Разрешает переадресацию между приложениями при использовании аутентификации форм. Оба приложения должны опираться на одно и то же хранилище удостоверений
DefaultUrl default.aspx Указывает страницу, на которую направляется пользователь после успешной регистрации, если он напрямую запросил страницу регистрации, указанную в LoginUrl
Domain пусто Может указывать хост, в рамках которого любое приложение может использовать одни и те же cookie-наборы
Path / Путь для cookie-наборов. Рекомендуется по умолчанию

Перечисленные свойства устанавливаются как атрибуты дочернего дескриптора <forms> секции <authentication mode="Forms" />. Вот пример использования полного набора этих атрибутов в файле web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <compilation debug="true" />
        <authentication mode="Forms">
            <forms 
                name="MyCookieName"
                loginUrl="MyLogin.aspx"
                timeout="20"
                slidingExpiration="true"
                cookieless="AutoDetect"
                protection="All"
                requireSSL="false"
                enableCrossAppRedirects="false"
                defaultUrl="MyDefault.aspx"
                domain=""
                path="/"
            /> 
        </authentication>
    </system.web>
</configuration>

Хранение удостоверений в конфигурационном файле

Хоть это и не самый лучший способ хранения удостоверений пользователей, зато самый простой. Вообще, удостоверения можно хранить где угодно, только нужно предусмотреть соответствующий код их сравнения с введенными на странице регистрации данными. Если удостоверения хранятся в файле web.config, то их нужно помещать в дочерний для <forms> дескриптор <credentials>. Вот пример для трех пользователей

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <compilation debug="true" />
        <authentication mode="Forms">
            <forms 
                name="MyCookieName"
                loginUrl="MyLogin.aspx"
                timeout="20"
                slidingExpiration="true"
                cookieless="AutoDetect"
                protection="All"
                requireSSL="false"
                enableCrossAppRedirects="false"
                defaultUrl="MyDefault.aspx"
                domain=""
                path="/"
            >
                <credentials passwordFormat="Clear">
                    <user name="Admin" password="Root" />
                    <user name="Petja" password="Xa-xa" />
                    <user name="Vasja" password="Xo-xo" />
                </credentials>
            </forms>
        </authentication>
    </system.web>
</configuration>
< Лекция 17 || Лекция 18: 123456789
Илья Онучин
Илья Онучин
Россия
Igor Chelyadinski
Igor Chelyadinski
Беларусь, Минск, №54, 2013