
- •1. Язык программирования c# 3
- •2. Базовые элементы .Net Framework 67
- •3. ТЕхнология .Net Remoting 144
- •Введение
- •1. Язык программирования c#
- •1.1. Платформа .Net – обзор архитектуры
- •1.2. Язык c# - общие концепции синтаксиса
- •1.3. Система типов языка c#
- •1.4. Преобразования типов
- •1.5. Идентификаторы, ключевые слова и литералы
- •1.6. Объявление переменных, полей и констант
- •1.7. Выражения и операции
- •1.8. Операторы языка c#
- •1.9. Объявление и вызов методов
- •1.10. Массивы в c#
- •1.11. Работа с символами и строками в c#
- •1.12. Синтаксис объявления класса, Поля и методы класса
- •1.13. Свойства и индексаторы
- •1.14. Конструкторы класса и Жизненный цикл объекта
- •1.15. Наследование классов
- •1.16. Перегрузка операЦий
- •1.17. Делегаты
- •1.18. События
- •1.19. Интерфейсы
- •1.20. Структуры и перечисления
- •1.21. Пространства имен
- •1.22. Генерация и обработка исключительных ситуаций
- •1.23. Нововведения в языке c# 2.0
- •1.24. Обобщенные типы (generics)
- •2. Базовые элементы .Net Framework
- •2.1. Метаданные и механизм отражения
- •2.2. Пользовательские и встроенные атрибуты
- •2.3. Пространство имен system.Collections
- •2.4. Работа с файлами и директориями
- •2.5. Использование потоков данных
- •2.6. Сериализация
- •2.7. Сериализация объектов в нестандартном формате
- •2.8. Введение в xml
- •2.9. Работа с xml-документами в .Net framework
- •2.10. МНогопоточное программирование
- •2.11. Синхронизация потоков
- •2.12. Асинхронный вызов методов
- •2.13. Состав и взаимодействие сборок
- •2.14. Конфигурирование сборок
- •3. ТЕхнология .Net Remoting
- •3.1. Домены приложений
- •3.2. Архитектура .Net Remoting
- •3.3. Активация удаленных объектов и их время жизни
- •3.4. Программная настройка Remoting
- •3.5. Удаленные Объекты с клиентской активацией
- •3.6. Настройка Remoting при помощи конфигурационных файлов
- •3.7. Хостинг распределенных приложений
- •3.8. Объекты-сообщения
- •3.9. Пользовательские канальные приемники
- •4.1. Архитектура ado.Net
- •4.2. Учебная база cd Rent
- •4.3. Соединение с базой данных
- •4.4. Выполнение команд и запросов к базе данных
- •4.5. Чтение данных и объект DataReader
- •4.6. Параметризированные запросы
- •4.7. Рассоединенный набор данных
- •4.8. Заполнение Рассоединенного набора данных
- •4.9. Объект класса DataColumn – колонка таблицы
- •4.10. Объекты класса DataRow – строки таблицы
- •4.11. Работа с объектом класса DataTable
- •4.12. DataSet и схема рассоединенного набора данных
- •4.13. Типизированные DataSet
- •4.14. Поиск и фильтрация данных в DataSet
- •4.15. Класс DataView
- •4.16. СиНхронизация набора данных и базы
- •5.1. Архитектура и общие концепции asp.Net
- •5.2. Пример aspx-страницы. Структура страницы
- •5.3. Директивы страницы
- •5.4. Класс System.Web.Ui.Page. События страницы
- •5.5. Серверные элементы управления
- •5.6. Элементы управления Web Controls
- •5.7. Проверочные элементы управления
- •5.8. Списковые элементы управления
- •5.9. Связывание данных
- •5.11. Управление состояниями в web-приложениях
- •5.12. Кэширование
- •5.13. Безопасность в web-приложениях
- •5.14. Создание пользовательских элементов управления
- •Литература
5.13. Безопасность в web-приложениях
Аутентификацией (authentication) называется процесс идентификации пользователей приложений. Авторизация (authorization) – это процесс предоставления доступа пользователям на основе их идентификационных данных. Аутентификация наряду с авторизацией представляют собой средства защиты web-приложений от несанкционированного доступа.
Для аутентификации пользователей может применяться сервер IIS. По умолчанию IIS не идентифицирует пользователей, а обрабатывает все запросы как анонимные с учетной записью IUSR_имя_компьютера. Просмотр и изменение привилегий учетной записи для анонимного доступа выполняется с помощью оснастки Computer Management (Управление компьютером). В частности, можно изменить членство этой учетной записи в группах.
Для отдельного виртуального каталога можно задать особый режим аутентификации, использовав окно свойств IIS (Безопасность каталога).
Рис. 25. Свойства безопасности виртуального каталога
Заметим, что большинство web-приложений не использует аутентификацию на основе IIS, так как для этого нужно, чтобы клиент выполнил некие дополнительные действия, например, получил сертификат или учетную запись на сервере. Поэтому в данном параграфе подобный способ обеспечения безопасности подробно рассматриваться не будет.
Рассмотрим средства аутентификации ASP.NET1. Отметим, что если клиент аутентифицируется, то информация о нем доступна посредством свойства User класса Page или класса HttpContext. Свойство User указывает на реализацию интерфейса IPrincipal. Этот интерфейс содержит одно свойство и один метод. Свойство Identity является указателем на реализацию интерфейса IIdentity, а метод IsInRole() проверяет членство клиента в указанной группе. Ниже приведено описание интерфейса IIdentity:
public interface IIdentity {
string AuthenticationType { get; }
bool IsAuthenticated { get; }
string Name { get; }
}
Свойство IsAuthenticated используется для различения аутентифицируемых и анонимных клиентов. Свойство Name можно применить для выяснения идентичности клиента. Если клиент аутентифицируется, то свойство AuthenticationType позволит выяснить тип аутентификации. В следующем листинге представлена страница, которая выводит аутентификационную информацию клиента:
<%@ Page Language="C#"%>
<script runat="server">
void Page_Load(object src, EventArgs e)
{
AuthUser.Text = User.Identity.Name;
AuthType.Text = User.Identity.AuthenticationType;
}
</script>
<html>
<body>
<h1>Страница тестирования безопасности</h1>
<h3>пользователь:</h3>
<asp:Label ID="AuthUser" runat="server" />
<h3>тип аутентификации:</h3>
<asp:Label ID="AuthType" runat="server" />
</body>
</html>
Задать требования аутентификации клиентов web-приложения можно путем добавления соответствующих элементов в конфигурационный файл приложения web.config. Тип аутентификации клиентов задается с помощью элемента authentication, атрибут mode которого может принимать одно из четырех значений: Windows (по умолчанию), Forms, Passport и None. Если задан режим Windows, то все задачи аутентификации перекладываются на web-сервер.
Сконфигурировав тип аутентификации на использование ASP.NET, нужно продумать цели аутентификации. Аутентификация выполняется для ограничения доступа клиентов ко всему приложению или к его частям с помощью элемента authorization. В этот элемент добавляются подэлементы allow и deny, задающие предоставление или отказ в доступе отдельным пользователям и ролям. Метасимвол * используется для представления всех пользователей, а ? – для представления анонимных пользователей. Следующий пример конфигурационного файла отказывает анонимным пользователям в праве доступа к сайту:
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Элементы allow и deny поддерживают три атрибута: users, roles и verbs. Значениями этих атрибутов могут быть разделенные запятыми списки пользователей, ролей и команд. Это позволяет сконфигурировать сложные требования безопасности. Например, в следующем фрагменте пользователям MyDomain\alice и MyDomain\bob предоставлен полный доступ к приложению, все «именованные» пользователи имеют право передавать запросы GET, анонимным пользователям доступ к приложению запрещен:
<authorization>
<allow users="MyDomain\alice, MyDomain\bob"/>
<allow users="*" verbs="GET"/>
<deny users="?"/>
</authorization>
Вернемся к рассмотрению различных типов аутентификации и остановимся на режиме аутентификации Forms. Принцип действия аутентификации в этом режиме следующий:
Когда пользователь первый раз запрашивает ресурс, требующий аутентификации, сервер перенаправляет запрос в выделенную страницу регистрации.
Регистрационная страница принимает данные пользователя (как правило, имя и пароль), а затем приложение аутентифицирует пользователя (предположительно с помощью базы данных).
Если пользователь успешно зарегистрировался, сервер предоставляет ему аутентификационный файл cookie в зашифрованном виде, который действителен на протяжении сеанса (но может быть сохранен на клиентском компьютере для использования в последующих сеансах).
Пользователь перенаправляется к интересующему его ресурсу, однако теперь он предоставляет в запросе идентификационный cookie и получает доступ.
Если в файле web.config задать аутентификацию Forms, то дополнительные настройки режима можно выполнить во вложенном элементе forms, атрибуты которого содержит таблица 57.
Таблица 57
Атрибуты элемента forms
Атрибут |
Значения |
Значение по умолчанию |
Описание |
name |
Строка |
.ASPXAUTH |
Имя файла cookie |
loginUrl |
Адрес URL |
login.aspx |
Адрес URL страницы регистрации |
protection |
All, None, Encryption, Validation |
All |
Режим защиты файла cookie |
timeout |
Минуты |
30 |
Скользящее время жизни файла cookie (переустанавливается при каждом запросе) |
path |
Маршрут |
/ |
Маршрут файла cookie |
Пример файла web.config, конфигурирующего аутентификацию в режиме Forms, показан в следующем листинге:
<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
<authentication mode="Forms">
<forms loginUrl="login.aspx"/>
</authentication>
</system.web>
</configuration>
Теперь, чтобы аутентификация на основе cookie заработала, нужно реализовать страницу регистрации. Для реализации страницы регистрации платформа ASP.NET предоставляет класс FormsAuthentication. Этот класс состоит главным образом из статических методов, управляющих аутентификационными файлами cookie. Например, чтобы предоставить такой файл клиенту, нужно вызвать метод SetAuthCookie(). Метод RedirectFromLoginPage() предоставляет cookie клиенту и перенаправляет клиента в запрошенную им страницу.
Приведем пример страницы регистрации. Обратите внимание на наличие флажка, позволяющего запомнить данные клиента для следующих сеансов.
Рис. 26. Страница регистрации
<!-- Файл login.aspx -->
<%@ Page Language="C#" %>
<script runat="server">
void OnClick_Login(object src, EventArgs e) {
if ((m_usrname.Text == "Alex") && (m_pass.Text == "pass"))
FormsAuthentication.RedirectFromLoginPage(m_usrname.Text,
m_save_pass.Checked);
else msg.Text = "Неверно. Попытайтесь еще раз";
}
</script>
<html>
<body>
<form runat="server">
<h2>Страница регистрации</h2>
Имя пользователя:
<asp:TextBox ID="m_usrname" runat="server" /><br />
Пароль:
<asp:TextBox ID="m_pass" TextMode="Password"
runat="server"/> <br/>
Запомнить пароль?
<asp:CheckBox ID="m_save_pass" runat="server" /><br />
<asp:Button Text="Регистрация" OnClick="OnClick_Login"
runat="server" /><br />
<asp:Label ID="msg" runat="server" />
</form>
</body>
</html>
Рассмотрим еще один пример. Достаточно часто клиенту предоставляется возможность идентифицировать себя, если он этого хочет, или возможность анонимного доступа в противном случае. В этом случае имеет смысл интегрировать форму регистрации в страницу. При регистрации вызывается метод FormsAuthentication.SetAuthCookie() и выполняется перенаправление на эту же страницу. При загрузке страницы проверяется, идентифицирован ли пользователь, и если да, то выводиться специфичная для пользователя информация. Текст страницы default.aspx представлен ниже:
<!-- Файл default.aspx -->
<%@ Page Language="C#"%>
<script runat="server">
void Page_Load(object src, EventArgs e) {
if (User.Identity.Name == "Alex") msg.Text = "Hello Alex";
else msg.Text = "General Info";
}
void OnClick_Login(object src, EventArgs e) {
if((m_usrname.Text == "Alex") && (m_pass.Text == "pass"))
FormsAuthentication.SetAuthCookie(m_usrname.Text,false);
Response.Redirect("default.aspx");
}
</script>
<html>
<body>
<form id="Form1" runat="server">
<h2>Регистрация</h2>
Имя :
<asp:TextBox ID="m_usrname" runat="server" /><br />
Пароль:
<asp:TextBox ID="m_pass" TextMode="Password"
runat="server"/> <br/>
<asp:Button ID="Button1" Text="Войти"
OnClick="OnClick_Login" runat="server"/><br />
<asp:Label ID="msg" runat="server" />
</form>
</body>
</html>
Файл web.config:
<configuration>
<system.web>
<authentication mode="Forms" />
</system.web>
</configuration>