Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Три примера из файла

AssemblyInfo.cs
(см. ниже) демонстрируют использование атрибутов для запроса полномочий. Эти примеры можно найти в проекте
SecurityАрр9
среди загружаемых с сайта издательства Wrox файлов. Первый атрибут выдвигает требование, чтобы сборка имела
UIPermission
, что даст приложению доступ к интерфейсу пользователя. Запрос делается для минимальных полномочий, а если это право не предоставляется, то сборка не сможет запуститься.

Using System.Security.Permissions;

[assembly:UIPermissionAttribute(SecurityAction.RequestMimimum)]

Затем

запрашивается, отказывается ли сборка от доступа к диску
C:\
. Настройка атрибута означает, что для всей сборки будет заблокирован доступ к этому диску:

[assembly:FileIOPermissionAttribute(SecurityAction.RequestRefuse, Read="C:\\")]

Ниже дан атрибут, который запрашивает для сборки необязательные полномочия, чтобы обеспечить доступ к неуправляемому коду:

[assembly:SecurityPermissionAttribute(SecurityAction.RequestOptional,

 Flags = SecurityPermissionFlag.UnmanagedCode)]

В данном сценарии можно было бы добавить этот атрибут в приложение, которое обращается к неуправляемому коду по крайней мере в одном месте. В таком случае мы определяем, что это полномочие является необязательным, предполагая, что приложение может выполняться без полномочия доступа к неуправляемому коду. Если сборке не предоставлены права для доступа к неуправляемому коду и она попытается это сделать, то будет порождаться исключение SecurityException, которое должно ожидаться приложением и соответственно обрабатываться.

При рассмотрении требований полномочий для приложения обычно необходимо выбрать одну из следующих возможностей:

□ Запрос всех необходимых полномочий в начале выполнения и постепенное снижение требований или выход, если эти полномочия не предоставлены.

□ Отказ от запроса полномочий в начале выполнения, но готовность обрабатывать исключения безопасности внутри приложения.

Если сборка была сконфигурирована для использования атрибутов полномочий таким образом, мы сможем использовать утилиту permview.exe для просмотра полномочий, нацеливая ее на файл сборки, содержащий манифест сборки:

permview.exe assembly.dll

Вывод для приложения, использующего три показанных атрибута, будет выглядеть так.

minimal permission set:

<PermissionSet class="System.Security.PermissionSet" version="1">

 <IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=1 .0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

version="1" Unrestricted="true" />

</PermissionSet>

optional permission set:

<PermissionSet class="System.Security.Permission.Set" version="1">

 <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

version="1"

Flags="UnmanegedCode" />

</PermissionSet>

refused permission set:

<PermissionSet class="System.Security.PermissionSet" version="1" >

 <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

version="1"

Read="C:\" />

</PermissionSet>

В

дополнение к запрашиваемым полномочиям можно также запросить целое множество прав сразу. Так как некоторые множества полномочий (
Internet
,
LocalIntranet
и
Everything
) изменяются с помощью политики безопасности при выполнении сборки, то они запрашиваться не могут. Например, если сборка сообщила, что ей необходимо предоставить для выполнения все полномочия в множестве полномочий
LocalIntranet
, а администратор затем сузил множество прав
LocalIntranet
во время выполнения приложения, то может быть неизвестно, в каком множестве прав происходит работа.

Существует три множества полномочий, которые нельзя изменить во время выполнения приложения, эти множества могут запрашиваться с помощью атрибутов:

□ 

Nothing

□ 

Execution

□ 

FullTrust

Вот пример того, как запрашивается встроенное множество полномочий:

[assembly:PermissionSetAttribute(SecurityAction.RequestMinimum,

 Name = "FullTrust")]

В этом примере сборка запрашивает, как минимум, встроенное множество полномочий

FullTrust
. Если это множество не будет предоставлено, то сборка породит во время выполнения исключение безопасности.

Неявное полномочие

Часто, когда предоставлена некоторые полномочия, возникает неявное утверждение, что также даны и другие полномочия. Например, если присвоено полномочие

FileIOPermission
для
C:\
, то неявно предполагается, что также имеется доступ к его подкаталогам (допущение системы безопасности учетных записей Windows).

Если необходимо проверить, что данное полномочие неявно вносит другое полномочие в качестве подмножества, то можно сделать следующее.

// Пример из SecurityApp5

class Class1 {

 static void Main(string[ ] args) {

CodeAccessPermission permissionA =

new FileIOPermission(FileIOPermissionAccess.AllAccess, @"C:\");

CodeAccessPermission permissionB =

new FileIOPermission(FileIOPermissionAccess.Read, @"C:\temp");

if (permissions.IsSubsetOf(permissionA) {

Console.WriteLine("PermissionB is a subset of PermissionA");

Поделиться:
Популярные книги

В теле пацана 4

Павлов Игорь Васильевич
4. Великое плато Вита
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
В теле пацана 4

Эфемер

Прокофьев Роман Юрьевич
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Эфемер

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13

Король Руси

Ланцов Михаил Алексеевич
2. Иван Московский
Фантастика:
альтернативная история
6.25
рейтинг книги
Король Руси

Делегат

Астахов Евгений Евгеньевич
6. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Делегат

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Чемпион

Демиров Леонид
3. Мания крафта
Фантастика:
фэнтези
рпг
5.38
рейтинг книги
Чемпион

Нефилим

Демиров Леонид
4. Мания крафта
Фантастика:
фэнтези
боевая фантастика
рпг
7.64
рейтинг книги
Нефилим

Береги честь смолоду

Вяч Павел
1. Порог Хирург
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Береги честь смолоду

Восход. Солнцев. Книга XI

Скабер Артемий
11. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга XI

Иван Московский. Том 5. Злой лев

Ланцов Михаил Алексеевич
5. Иван Московский
Фантастика:
попаданцы
альтернативная история
6.20
рейтинг книги
Иван Московский. Том 5. Злой лев

Таблеточку, Ваше Темнейшество?

Алая Лира
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Таблеточку, Ваше Темнейшество?

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI