* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Императивная защита по правам доступа к коду
8 февраля 2009

Подобно защите, основанной на ролях, защита по правам доступа к коду может быть
императивной или декларативной. При использовании императивной защиты по
правам доступа к коду запрос и проверка разрешений производится во время вы-
полнения.
Метод Demand является ключевым для защиты по правам доступа к коду. CLR
предоставляет разрешение на доступ к защищенным ресурсам по результатам про-
верки политики безопасности, установленной системным администратором для
данной сборки. При вызове метода Demand некоторого объекта разрешения проис-
ходит следующее: метод Demand просматривает стек, проверяя у каждой вызываю-
щей процедуры, расположенной выше в стеке вызовов, наличие разрешения на до-
ступ к ресурсу, защищенному объектом разрешения, чей метод Demand вызван. Так,
метод доверяемой сборки может вызывать другой метод, защищенный соответству-
ющим разрешением. Если защищенный метод вызван доверяемой сборкой, вызов
будет успешным и доступ к защищенному ресурсу будет предоставлен. Если сбор-
ка, с которой не установлены доверительные отношения, вызывает метод из дове-
ряемой сборки, а тот, в свою очередь, вызывает защищенный метод, происходит
следующее, Объект разрешения просматривает стек вызовов, чтобы убедиться в
наличии разрешений на доступ к защищенному ресурсу у всех «звеньев» цепочки
вызовов. Первая сборка не имеет соответствующего разрешения, поэтому вызов
заканчивается неудачей.
Вот пример применения метода Demand:
Visual Basic .NET
Создать объект разрешения, предоставляющего
неограниченный доступ к файловой системе.
Dim myPermissior. As New
F]leIOPermission(Ре mussionState.Unrest rioted)
У всех процедур, вызывающих данный код, должно быть
оазрешепие на неограниченный доступ к файловой системе,
myPermission.Demand(}
Visual C#
// Создать объект разрешения, предоставляющего
// неограниченный доступ к файловой системе.
FilelOPermission ^Permission = new
FilelOPemission(РеrmissionState.Unrestricted);
// У всех процедур, вызывающих данной код, должно быть
// разрешение на неограниченный доступ к файловой системе,
myPemission. Demand();
Разрешения на доступ кода годятся и для организации защиты кода на уровнях,
расположенных выше и ниже заданной политики безопасности. Например, метод
Оспу запрещает доступ к ресурсу, защищенному данным объектом разрешения, даже
если CLR предоставила соответствующее разрешение вызывающей стороне:
Visual Basic .NET
Создать объект разрешения, предоставляющего
неограниченный доступ к файловой системе.
Dim ггуРе mission As New
FilelOPe mission (Ре rnissionState. Unrestricted)
Отказывает текущему методу в доступе к файловой системе.
myPermission.DenyO
Visual C#
// Создать объект разрешения, предоставляющего
// неограниченный доступ к файловой системе.
FilelOPermissiori myPermission = new
FilelQPermission(PermissionState.Unrestricted);
// Отказывает текущему методу в доступе к файловой системе.
myPermission.Deny();
Сходным образом действует метод PermitOnly. Он позволяет отказать в доступе
ко всем ресурсам категории, защищенной некоторым объектом разрешения, пре-
доставив его только для подмножества ресурсов этой категории, явно связанного с
объектом разрешения. Предположим, что был создан объект FilelOPermission, уп-
равляющий доступом для записи к некоторому файлу. В результате вызова метода
PermitOnly данного объекта разрешения любые попытки доступа к файловой систе-
ме окончатся неудачей, кроме попыток записи в указанный файл. Вот пример при-
менения метода PermitOnly,
Visual Basic .NET
Создать объект разрешения на запись в указанный файл,
Dim myPermission As Mew
FilelOPermission(FilelOPermissionAccess.Write, "C:\myFile.txt")
Разрешается лишь запись в указанный файл, остальные виды
доступа к файловой системе запрещаются,
myPermission.PermitOnly()
Visual C#
/7 Создать объект разрешения на запись в указанный файл.
FilelOPerrnission myPermission = new
FilelOPermission(FilelOPermissionAccess.Write, "C:\\myFile.txt");
// Разрешается лишь запись в указанный файл, остальные виды
// доступа к файловой системе запрещаются.
myPermission.PermitOnly();
Метод Assert объявляет, что вызвавший его метод обладает разрешением на дос-
туп к запрошенному ресурсу. Вызов метода Assert прекращает просмотр стека мето-
дом Demand с целью проверки наличия данного разрешения. Так, если сборка, ко-
торая не состоит в доверительных отношениях, вызовет метод, который, в спою
очередь, вызовет Assert, а затем метод, защищенный методом Demand, произойдет
следующее: инициированная методом Demand проверка будет остановлена, а ис-
полнение вызова — продолжено, даже если в начале цепочки вызовов будет сборка,
не пользующаяся доверием. Метод Assert таит потенциальную опасность, посколь-
ку может предоставить доступ к защищенным ресурсам сборке, с которой не уста-
новлены доверительные отношения. Используйте метод Assert осмотрительно, не
вызывайте его в обход системной политики безопасности. Для корректного вызова
.Assert необходимо предоставить сборке соответствующие разрешения:
Visual Basic .NET
' Создать объект разрешения, предоставляющего
неограниченный доступ к файловой системе.
Dim myPermission As New
FilelQPerrnission (Ре rmissionState. Unrestricted)
' Предоставить разрешение на доступ к файловой системе.
myPermission.Assert()
Visual C#
// Создать объект разрешения, предоставляющего
// неограниченный доступ к файловой системе.
FilelOPermission myPermission = new
FilelOPemission(РеrmissionState.Unrestricted);
// Объявляется разрешение на доступ к файловой системе
myPermission.Assert():
Методы Revert, поддерживаемые всеми классами разрешений, отменяют дей-
ствие методов Deny, Assert или PermitOnfy. Это статические методы: они вызывают-
ся по имени класса, а не объекта, и действуют на все объекты данного класса. Вот
пример применения методов Revert
Visual Basic .NET
Отменить все модификации объек~а ReflectionPermission.
ReflectionPemission.RevertAll{)
Отменить действие метода Deny на объект EnvironrnentPermission.
Environment Pe rrnission.RevertOeny ()
Отменить действие метода Assert на объект FilelOPermission.
FilelOPerrnission. Revert Assert ()
Отменить действие метода PermitOnly на объект MessageQueuePeemission.
MessageGueuePermission.RevertPermitOnly()
Visual C#
// Отменить все модификации объекта ReflectionPermission.
ReflectionPe emission. RevertAllO;
// Отменить действие метода Deny на объект EnvironmentPermission.
EnvironmentPermission.Reve rtDeny();
// Отменить действие метода Assert на объект FilelOPermission.
FilelOPermission. Reve-~tAs.se rt();
// Отменить действие метода PermitOnly на объект MessageQueuePermission.
MessageQueuePermission.RevertPerrriitOnly{);

Теги: .NET

Статьи по теме:

Наследование от абстрактного класса
Объектные модели
Типы и пространства имен .NET
Реализация членов интерфейса на Visual C#
Применение встроенной функциональности типов данных
Работа с несколькими результирующими наборами
Свойства, доступные только для чтения или только для записи
Мемоизация (memoization)
Классы и структуры
Обработка ошибок при обновлении базы данных
Извлечение и обновление данных с помощью объектов DataAdapter и DataSet
Отображение сообщений об ошибках
Защита приложений
Применение типов .NET Framework в приложениях
Запись трассировочных данных в журнал событий
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Императивная защита по правам доступа к коду. Регион сайта: Москва и Санкт-Петербург