Использование возможностей.NET Framework при построении системы безопасности приложения ДокладчикMicrosoft
Главные темы Разрешения доступа кода aka CAS Разрешения Identity Базируются на свидетельстве (aka Evidence) Безопасность на основе ролей aka PrincipalPermission Политика безопасности Демонстрация всего вышеперечисленного!
Разрешения доступа кода Два основных типа Доступ к ресурсу Доступ к операции Наследуются от CodeAccessPermission Код запрашивает разрешения.NET Framework предоставляет... на основе свидетельства
Основы CAS Код с безопасными типами aka type-safe Императивный и декларативный синтакс КодАтрибут Запрос разрешений Частично доверяемые сборки Разрешения для библиотек классов
Код с безопасными типами JIT-компилятор проверяет код Утилита PEVerify проверяет код на безопасность типов Компилятор генерирует (или не генерирует) безопасный код Влияет на предоставление разрешений
Императивный синтаксис FileIOPermission filePerm = new FileIOPermission( filePerm.Demand();
Декларативный синтаксис [SqlClientPermission( Action=SecurityAction.Demand, ConnectionString=Database=Pubs;Server=(local)) ] public void MyMethod(connectionString) { SqlConnection conn = new SqlConnection(connectionString); conn.Open(); }
Запрос разрешений На уровне сборки Сохраняются в манифесте Средство сообщить среде о необходимых разрешениях
Типы запросов МинимальныеНеобязательныеОтклоненные Именованные наборы NothingExecutionFullTrustInternetLocalIntranetSkipVerification XML представление СтрокаФайл
Запрос разрешения через XML представление [assembly:PermissionSetAttribute( SecurityAction.RequestMinimum, ")]
Частично доверяемые сборки Частично доверямые сборки не могут обращаться к системным библиотекам Нужно использовать AllowPartiallyTrustedCallersAttribute Некоторые системные библиотеки имеют этот атрибут Accessibility.dllIEExecRemote.dllMicrosoft.VisualBasic.dllMscorlib.dllSystem.dllSystem.Data.dllSystem.Drawing.dll System.Web.dll (1.1) System.Web.Mobile.dll (1.1) System.Web.Services.dll System.Web.RegularExpressions.dll (1.1) System.Windows.Forms.dllSystem.XML.dll
Разрешения для библиотек классов Требование – Demand Полный проход стека вызовов Требование при сборке – LinkDemand Нет прохода стека Кроме статических конструкторов Требование при наследовании – InheritanceDemand Класс или метод Требует наличия разрешения для наследованых классов Запросы не распространяются на вложенные классы
Разрешения Identity Назначаются на основе свидетельства Определяются загрузчиком (хостом).EXEСервисASP.NET Internet Explorer Цифровая подпись издателя Web-сайт Strong Name (открытый ключ, имя, версия) URL Зона (Internet Explorer)
Запрос Identity [UrlIdentityPermission( SecurityAction.Demand, Url=" Public void DoSomething() { }
Ролевая безопасность Политика доступа на основе ролей Исполняемый код всегда идентифицирован Windows - пользователь Generic – cобственная схема аутентификации Principal – контекст безопасности Включает в себя Identity PrincipalPermission обобщает подход Запросы разрешений на основе Identity Вызывающий код обязан совпадать с встроенной ролью
Определение текущего пользователя // 1-й способ (== Win32) WindowsIdentity id = WindowsIdentity.GetCurrent(); // 2-й способ WindowsIdentity id = Thread.CurrentPrincipal.Identity; // 3-й способ (в ASP.NET) WindowsIdentity id = Context.User.Identity;
Проверка принадлежности к роли // Императивная PrincipalPermission myPerm = new PrincipalPermission(Dima, Developer); myPerm.Demand(); // Декларативная [PrincipalPermission( SecurityAction.Demand, Name = «Dima", Role = Manager")] public static void SecureAccess() { } // Прямая WindowsPrincipal MyPrincipal = (Thread.CurrentPrincipal as WindowsPrincipal); if(MyPrincipal.IsInRole(«Developer")) { }
Политика безопасности Настраивается через.NET Framework Configuration caspol Состоит из Уровней Групп кода Именованных наборов разрешений
Уровни политики безопасности ИерархияEnterpriseMachineUserAppDomain Нижние уровни не могут увеличить разрешения.. но могут уменьшить
Группы кода Логическая группировка, основанная на AllMembershipConditionApplicationDirectoryMembershipConditionHashMembershipConditionPublisherMembershipConditionSiteMembershipConditionStrongNameMembershipConditionUrlMembershipConditionZoneMembershipCondition Ассоциируется с набором разрешений Свидетельство используется для проверки вхождения
Наборы разрешений Включают в себя NothingExecutionInternetLocalIntranetEverythingFullTrust Состоят как минимум из одного разрешения
Свидетельство Информация от загрузчика или хоста Включает в себя Identity Используется средой для определения принадлежности к группе кода... тем самым получая набор разрешений
Демонстрация Разработка Add-in с ограниченными правами Демонстрация Разработка Add-in с ограниченными правами