Механізми безпеки в
Умова для перевірки на основі сертифікату Authenticode X.509v3.
Таблиця 3. Можливі умови для перевірки Evidence.
Крім MembershipCondition, об'єкт CodeGroup пов'язаний з об'єктом PolicyStatement. Навіщо це знадобилося, і чому не можна було просто вказати потрібний набір прав (об'єкт PermissionSet)? Основна причина - це додаткова можливість більш тонко впливати на які видаються повноваження. Для цього у PolicyStatement є додатковий параметр PolicyStatementAttribute, що приймає такі значення:
- PolicyStatementAttribute.Exclusive: цей прапор означає, що коду будуть надані тільки ті повноваження, які пов'язані з цією групою.
Ми вже використовували цей прапор (рисунок 4) - саме він дав нам можливість використовувати повноваження, зазначені у новоствореній групі, перекривши повноваження, визначені для SecurityZone = MyComputer
- PolicyStatementAttribute.LevelFinal: Використовуючи цей прапор, можна заборонити перевірку політик на більш низьких рівнях. Наприклад, цей прапор можуть використовувати адміністратори, створивши на рівні Enterprise власний набір груп коду і заборонивши будь-які зміни в його повноваження на рівнях MyComputer і нижче.
Схема зі зв'язком MembershipCondition (PolicyStatement досить хороша, але їй бракує гнучкості, так як PermissionSet - це статичний набір прав. Іноді прийняти рішення про те, що можна надати коду, а що не можна, можна тільки на основі динамічно змінюються даних. У цьому випадку нам можуть допомогти спадкоємці класу CodeGroup (таблиця 4).
Мабуть, найпоширеніший тип груп. Забезпечує об'єднання своїх повноважень з повноваженнями своїх "дітей".
Поведінка цієї групи також збігається з поведінку UnionCodeGroup, але на відміну від NetCodeGroup цей клас динамічно формує набір FileIOPermission. Природно, що права додаються тільки в тому випадку, якщо Url вказує на file: // протокол або UNC шлях
Як і випливає з назви - ця група повертає об'єднання зі свого набору повноважень і повноважень свого першого дочірнього елемента (у якого MembershipCondition підійшов до переданого Evidence)
Таблиця 4. Можливі типи CodeGroup.
Однак залишимо управління політиками безпеки через оснащення панелі управління системним адміністраторам. Для справжніх програмістів це не найкращий шлях, тому розглянемо невеликий приклад програмної настройки безпеки в додатку.
Створення "безпечних" додатків
Як приклад створимо найпростіше Windows.Forms-додаток, на основі якого розглянемо:
- настройку безпеки домена додатку;
- завантаження збірки з потрібним Evidence;
- створення власного повноваження і його використання.
Налаштування безпеки домена
Перше, що потрібно зробити для настройки безпеки - це створити PolicyLevel і призначити його домену додатки. З цього і почнемо: