Безопасность: аутентификация с помощью форм
Хранение удостоверений в конфигурационном файле
Хоть это и не самый лучший способ хранения удостоверений пользователей, зато самый простой. Вообще, удостоверения можно хранить где угодно, только нужно предусмотреть соответствующий код их сравнения с введенными на странице регистрации данными. Если удостоверения хранятся в файле 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>Листинг 37.2. Пример хранения удостоверений в конфигурационном файле
Упражнение 1. Управление доступом анонимных пользователей
Рассмотрим пример ограничения доступа к страницам сайта с помощью аутентификации форм и хранением удостоверений в конфигурационном файле. Пользователей в конфигурационный файл можно добавлять как декларативно, непосредственно редактируя секцию <credentials>, так и программно.
- Создайте пустой проект Web-приложения командой File/New/Web Site с именем Login
- Добавьте к приложению корневой конфигурационный файл Web.config, выполнив команду Website/Add New Item
- Заполните конфигурационный файл кодом настройки аутентификации форм и декларативным созданием пользователей
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="true" /> <authentication mode="Forms"> <forms name="MyCookieName" loginUrl="MyLogin.aspx" defaultUrl="MyDefault.aspx" protection="All" timeout="20" path="/" requireSSL="false" slidingExpiration="true" cookieless="AutoDetect" domain="" enableCrossAppRedirects="false"> <credentials passwordFormat="Clear"> <user name="Admin" password="Root" /> <user name="Петя" password="Уф&Уф" /> <user name="Вася" password='!$-*?"' /> </credentials> </forms> </authentication> </system.web> </configuration>Листинг 37.3. Код конфигурационного файла
Значение атрибута passwordFormat="Clear" обеспечивает открытое хранение пользователей в конфигурационном файле без всякого шифрования. Этот параметр применяется в надежде на то, что система автоматически ограничивает доступ конечных пользователей к конфигурационным файлам и что эти секретные данные никто не увидит. Но администратор сайта имеет доступ к конфигурационным файлам сайта, да и продвинутые злоумышленники тоже могут добраться до этой информации, обойдя защиту системы. Поэтому существуют встроенные алгоритмы хеширования ( MD5, SHA1 ), использование которых мы рассмотрим чуть позже.