Опубликован: 13.07.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 37:

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

< Самостоятельная работа 36 || Самостоятельная работа 37: 12345678
Аннотация: Основные задачи по защите сайта. Сертификаты. Аутентификация форм. Настройка режима аутентификации форм. Хранение удостоверений в конфигурационном файле. Управление доступом анонимных пользователей. Программное добавление пользователей в конфигурационный файл. Создание страницы регистрации. Хеширование паролей в конфигурационном файле. Закрепление за броузером постоянной аутентификации форм. Создание хранилища удостоверений. Добавление в хранилище БД новых пользователей через утилиту WAT. Страница регистрации при использовании Membership. Административные страницы управления аутентификацией с использованием API Membership. Административная страница создания пользователей в БД. Административная страница удаления пользователей из БД. Административная страница извлечения списков пользователей из БД. Административная страница обновления пользователей в БД. Элементы управления вкладки Login. Административная страница регистрации на базе элемента управления Login.
Ключевые слова: безопасность, аутентификация, распознавание, авторизация, шифрование, хеширование, ASP, net, целый, сайт, надежность, слабое звено, ПО, шифрование данных, защита данных, учётная запись, ключ, пользователь, доступ, Web, регистрация, SSL, secure, socket, layer, сокет, IIS, Internet, information, HTTP, адрес, порт, сервер, центр сертификации, CA, Certification Authority, сертификация, сервер сертификатов, открытый ключ, ключ сеанса, www-броузер, очередь, симметричный ключ, закрытый ключ, секретный ключ, симметричное шифрование, конфигурационный файл, authenticity, API, мандат, информация, cookie, анонимный доступ, ограничение доступа, вход в систему, timeout, encryption, valid, хост, дескриптор, создание пользователя, значение, параметр, администратор, MD5, browser, анонимный, интерфейс, валидатор, BorderStyle, 'ridge', dynamic, визуализация, имя пользователя, tooltip, всплывающая подсказка, регулярное выражение, управляющий символ, D-AMPS, сеанс, открытый текст, выход, алгоритм, конфигурация, ресурс, корневой каталог, файл, базы данных, конфигурационный параметр, administrative tools, WATS, база данных, refreshing, утилита, место, структуры баз данных, single-ended, аутентификация пользователя, пароль, admin, confirm, dialog, question, answer, continue, БД, поле, UserName, UserID, первичный ключ, регистр, Server Explorer, definition, меню, управление пользователем, поставщик данных, Active Directory, статические методы, DeleteUser, перегрузка, перегрузка метода, выходные параметры, провайдер, ASCII, GridView, DataField, объект, 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-сервере.

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

  • Thawte - http://www.thawte.com
  • VeriSign - http://www.verisign.com

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

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

Клиент (броузер) доверяет 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>
Листинг 37.1. Настройка режима аутентификации форм
< Самостоятельная работа 36 || Самостоятельная работа 37: 12345678
Александр Очеретяный
Александр Очеретяный
Украина, Киев
Анастасия Балыбердина
Анастасия Балыбердина
Украина, Киев, НТУУ КПИ