Delivering Excellence in Software Engineering Безопасность в ASP.Net Mikalai Strylets Software Engineer EPAM Systems Brest branch office, Belarus 1 ® 2011. EPAM Systems. All rights reserved. Безопасность в ASP.Net • Cредства защиты веб-приложений от несанкционированного доступа: – Аутентификация (authentication) называется процесс идентификации пользователей приложений. – Авторизация (authorization) – это процесс предоставления доступа пользователям на основе их идентификационных данных. 2 ® 2011. EPAM Systems. All rights reserved. Аутентификация • ASP.NET совместно с веб-сервером обеспечивает несколько возможных типов аутентификации: – Windows (default): этот метод основывается на использовании учётных записей Windows – Forms: аутентификация формой или, как её ещё называют, аутентификация на основе Cookie-файлов – Passport: это единая система регистрации, созданная Microsoft, которой можно воспользоваться на любом Webсайте, являющемся членом этой системы. – None • Выбор типа определяет механизм хранения маркеров аутентифицированного пользователя: – В случае типа Windows маркер помещается в контекст потока рабочего процесса ASP.NET. – Если используется тип Forms, маркер передается от клиента к серверу и обратно в cookie-файле. 3 ® 2011. EPAM Systems. All rights reserved. web.config <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> <authorization> <deny users="?"/> </authorization> <authentication mode="Forms"> <forms loginUrl="login.aspx"/> </authentication> </system.web> </configuration> 4 ® 2011. EPAM Systems. All rights reserved. Авторизация • Метасимвол * используется для представления всех пользователей, а ? – для представления анонимных пользователей. • Элементы <allow> и <deny> поддерживают три атрибута: users, roles и verbs • При определении прав доступа пользователя к ресурсу ASP.NET придерживается следующего алгоритма: – Строится список всех <allow> и <deny> элементов, начиная с ближайшего к ресурсу web.config, а затем добавляя элементы из web.config более высокого уровня, и, наконец, элементы machine.config. – Список просматривается сверху вниз до первого совпадения имени или роли в списке с именем или ролью текущего пользователя. – Тот элемент, который будет обнаружен при совпадении, определяет, может ли пользователь получить доступ к ресурсу. То есть, если обнаружили при совпадении элемент <allow>, то может, если <deny> - то нет. 5 ® 2011. EPAM Systems. All rights reserved. IPrincipal & IIdentity • Если клиент аутентифицируется, то информация о нем доступна посредством свойства User класса Page или класса HttpContext. • Свойство User указывает на реализацию интерфейса IPrincipal. • Этот интерфейс содержит одно свойство и один метод. – Свойство Identity является указателем на реализацию интерфейса IIdentity, – а метод IsInRole() проверяет членство клиента в указанной группе. public interface IIdentity { string AuthenticationType { get; } bool IsAuthenticated { get; } string Name { get; } } 6 ® 2011. EPAM Systems. All rights reserved. Аутентификация Forms 7 ® 2011. EPAM Systems. All rights reserved. Аутентификация Forms • Когда пользователь первый раз запрашивает ресурс, требующий аутентификации, сервер перенаправляет запрос в выделенную страницу регистрации. • Регистрационная страница принимает данные пользователя (как правило, имя и пароль), а затем приложение аутентифицирует пользователя (предположительно с помощью базы данных). • Если пользователь успешно зарегистрировался, сервер предоставляет ему аутентификационный файл cookie в зашифрованном виде, который действителен на протяжении сеанса (но может быть сохранен на клиентском компьютере для использования в последующих сеансах). • Пользователь перенаправляется к интересующему его ресурсу, однако теперь он предоставляет в запросе идентификационный cookie и получает доступ. 8 ® 2011. EPAM Systems. All rights reserved. Аутентификация Forms: преимущества и недостатки • Преимущества: – Во-первых, есть возможность определить по своему усмотрению внешний вид формы регистрации вместо стандартного окна регистрации Windows;. – Во-вторых, вы полностью контролируете вводимую информацию; – В третьих, сведения о пользователях теперь могут храниться не – только в базе данных SAM (Security Account Manager) или Active Directory, но и в хранилище другого типа, например: в базе данных, в каталоге LDAP, в виде XML-файлов или же обычного текстового файла. – И наконец, отпадает необходимость связывать политику безопасности сервера с политикой Web-приложения, поскольку, как только что было сказано, все сведения о пользователях можно вынести в отдельное хранилище данных, не имеющее никакого отношения к учётным записям ОС. • Недостатки: – пользователь должен разрешить применение cookie-файлов 9 ® 2011. EPAM Systems. All rights reserved. Class FormsAuthentication • Чтобы аутентификация на основе cookie заработала, нужно реализовать страницу регистрации. • Для реализации страницы регистрации платформа ASP.NET предоставляет класс FormsAuthentication. • Этот класс состоит главным образом из статических методов, управляющих аутентификационными файлами cookie. • Например, – чтобы предоставить такой файл клиенту, нужно вызвать метод SetAuthCookie(). – метод RedirectFromLoginPage() предоставляет cookie клиенту и перенаправляет клиента в запрошенную им страницу. 10 ® 2011. EPAM Systems. All rights reserved. FormsAuthentication • Пример 11 ® 2011. EPAM Systems. All rights reserved. MemberShip, Roles, Profile • Membership – управление учетными записями • Roles – управление ролями (правами) пользователей • Profile – хранение персональных настроек пользователя 12 ® 2011. EPAM Systems. All rights reserved. Схема работы • Создание необходимых таблиц в БД • Регистрация в web.config для приложения • Конфигурирование прав доступа на основе web.config в директориях приложения • Использование элементов управления, работающих с Membership/Roles – Login, LoginView, LoginName, LoginStatus… 13 ® 2011. EPAM Systems. All rights reserved. Добавление в БД таблиц для поддержки безопасности 14 ® 2011. EPAM Systems. All rights reserved. Избранные таблицы 15 ® 2011. EPAM Systems. All rights reserved. Membership • MembershipProvider – ActiveDirectoryMembershipProvider – SqlMembershipProvider • Membership API – Управление учетными записями 16 ® 2011. EPAM Systems. All rights reserved. Roles • RoleProvider • Управление доступом пользователей на основании ролей • Механизмы работы со списком ролей и пользователей, относящимся к роли • Интеграция с элементами управление • Использование ролей на уровне файлов конфигурации 17 ® 2011. EPAM Systems. All rights reserved. Элементы управления • Поддержка Membership и Roles – Форма аутентификации – Отображение имени пользователя – Форма восстановления пароля – Мастер создания учетных записей – Отображение контента на основании роли пользователя 18 ® 2011. EPAM Systems. All rights reserved. Profile • ProfileProvider • Удобный способ хранения пользовательских данных • Автоматическое сохранение и восстановление коллекции Profile 19 ® 2011. EPAM Systems. All rights reserved. Конфигурирование users, roles, rules 20 ® 2011. EPAM Systems. All rights reserved. Программное конфигурирование membership, users, roles string userName = "Default User"; string password = string.Empty; string newPassword = string.Empty; // Создание новой учётной записи Membership.CreateUser(userName, password); // Получение информации об определённом пользователе MembershipUser user = Membership.GetUser("TheUser"); // Изменить пароль пользователя user.ChangePassword(user.GetPassword(), newPassword); // Cбросить пароль (то есть удалить старый и // автоматически сгенерировать новый) string newGenPass = user.ResetPassword(); 21 ® 2011. EPAM Systems. All rights reserved. Программное конфигурирование membership, users, roles // Cоздать роли Admin и Guest и // заполнить их именами пользователей Roles.CreateRole("Admin"); Roles.AddUserToRole("TheUser", "Admin"); Roles.CreateRole("Guest"); var guests = new[] { "UserX", "Godzilla" }; Roles.AddUsersToRole(guests, "Guest"); // Установливаем, принадлежит ли пользователь к // определенной роли, и включаем соответствующие функции if (User.IsInRole("Admin")) { // включаем функции, специфические для данной роли } 22 ® 2011. EPAM Systems. All rights reserved. • Пример 23 ® 2011. EPAM Systems. All rights reserved. Ссылки 24 • http://msdn.microsoft.com/ru-ru/library/91f66yxt.aspxl — Безопасность в ASP.NET • http://www.asp.net/security/tutorials — Security Tutorials • http://www.techdays.ru/videos/1204.html — Безопасность в ASP.NET (© Гайдар Магдануров) • http://www.rsdn.ru/article/inet/aspnet1.xml — Средства безопасности ASP.NET. Часть 1 – Аутентификация • http://www.rsdn.ru/article/inet/aspnet2.xml — Средства безопасности ASP.NET. Часть 2 - Авторизация • http://www.codeproject.com/KB/web-security/FormAuthenticnAuthorizn.aspx — Form authentication and authorization in ASP.NET • http://www.intuit.ru/department/internet/praspnet/18/ — Программирование на ASP.NET (© Снетков) • http://www.iplayerhd.com/playerframe/progressive/1ddb808e-6536-4825944df7a2f5bf2022.aspx?autostart=false&width=768&height=432&cbartype=botto m — video on ASP.NET Basic authentication ® 2011. EPAM Systems. All rights reserved. Q&A ® 2011. EPAM Systems. All rights reserved.