Безопасность: аутентификация с помощью форм
Файлы к лабораторной работе Вы можете скачать здесь.
Безопасность включает в себя ряд мероприятий, необходимых для предотвращения несанкционированного доступа к сайту и защиты информации. Сюда входят аутентификация (распознавание) и авторизация (управление правами доступа к важным ресурсам) пользователя, шифрование, хеширование и цифровые подписи. Для всего этого ASP.NET содержит целый арсенал средств и их использование нужно планировать с самого начала разработки приложения, чтобы максимально смягчить потенциальную угрозу атак на сайт. При этом нужно всегда помнить, что надежность системы в целом определяется надежностью ее самого слабого звена.
Основные задачи по защите сайта
Основные задачи по защите сайта следующие:
- Аутентификация - опознавание источника сообщений по схеме "свой-чужой" с целью установить, является ли пользователь зарегистрированным на сайте или ананимным. Примером может служить проверка пропуска при входе в организацию
- Авторизация - определение уровня полномочий по допуску к важной информации и выполнению над ней определенных действий. Примером может быть допуск к определенным производствам или документации на предприятии
- Конфединциальность - изоляция данных одного пользователя от любого вида доступа со стороны других пользователей. Обеспечивается с помощью шифрования данных в каналах связи и в местах постоянного или временного хранения
- Целостность - защита данных от изменений в результате неавторизованного вмешательства
Аутентификация нового пользователя начинается с его регистрации. Пользователю предлагается страница регистрации с текстовыми полями, через которую у него запрашиваются некоторые идентификационные данные. По этим данным создается и сохраняется учетная запись, которая для узнаваемости пользователя на сайте является некоторым маркером или удостоверением. Зарегистрировавшемуся пользователю может быть отослан некоторый ключ, который в дальнейшем будет служить дополнительным условием при доступе к сайту.
Теперь при запросе ограниченного ресурса пользователь предъявит свое удостоверение, которое система верифицирует и примет решение: если удостоверение пользователя подтверждается, ему предоставляется доступ к Web-ресурсу, иначе будет предложена регистрация. Процесс аутентификации может выглядеть примерно так
В приложениях ASP.NET аутентификация может быть реализована одним из следующих способов:
- Аутентификация с помощью форм - поддерживается классом System.Web.Security.FormsAuthenticationModule
- Аутентификация Windows - поддерживается классом System.Web.Security.WindowsAuthenticationModule
- Аутентификация с помощью паспортов - поддерживается классом System.Web.Security.PassportAuthenticationModule
- Специализированная аутентификация - поддерживается внебиблиотечными классами сторонних производителей или самодельным классом
Системы коммуникации шифруются с помощью системы SSL (Secure Sockets Layer - уровень защищенных сокетов). Поскольку система SSL является службой IIS (Internet Information Services - службы информационной поддержки Internet) и работает под HTTP, то специально коммуникации нам шифровать не нужно - все пересылки шифрует сама служба. Единственное отличие - адрес запроса, защищенный SSL, начинается не с http://, а с https://. И трафик SSL проходит не через порт 80 для обычных запросов, а через порт 443.
Сертификаты
Обычно сервер, которому клиент собирается пересылать важные данные, маркируется сертификатом. Сертификат - это некоторый паспорт сервера, подтверждающий тот факт, что ему можно доверять. Организация, которой принадлежит сервер, приобретает сертификат у известного центра сертификации CA (Certificate Authority) и инсталирует его на своем Web-сервере.
Наиболее популярными центрами сертификации являются следующие сайты:
- Thawte - http://www.thawte.com
- VeriSign - http://www.verisign.com
Инсталированный на сервере сертификат содержит следующую информацию:
- Серийный номер сертификата
- Имя, название организации и адрес держателя сертификата
- Даты проверки сертификата
- Открытый ключ, который будет рассылаться клиентам для шифрования симметричного ключа сеанса
Клиент (броузер) доверяет CA и поэтому готов доверять подписанной CA информации. В свою очередь, CA сохраняет информацию о каждом зарегистрированном пользователе. Начало работы по защищенному каналу связи начинается так:
- Броузер посылает запрос на соединение с сервером
- В ответ сервер присылает свой сертификат
- Броузер запрашивает из центра сертификации оригинал поступившего сертификата и сравнивает его с присланным сервером
- Если информация в сертификатах совпадает, броузер считает адресуемый сервер заслуживающим доверия и решается на соединение. Он генерирует случайным образом симметричный ключ шифрования подходящей для него длины, шифрует его присланным в сертификате открытым ключем и отсылает серверу
- Сервер получает от броузера зашифрованный ключ сеанса и расшифровывает его своим закрытым ключем. После этого у сервера и броузера есть одинаковый секретный ключ, с помощью которого они готовы применять симметричное шифрование к пересылаемой друг другу информации на протяжении всего текущего сеанса
Аутентификация форм
Аутентификация (распознавание) на основе форм реализуется в пространстве имен 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, из следующего набора:
Перечисленные свойства устанавливаются как атрибуты дочернего дескриптора <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>Листинг 37.1. Настройка режима аутентификации форм