Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [70-316] Declarative and imperative security, что за звери такие, расскажите 
:(
    Опции темы
marcusmae
Дата 30.9.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Всем привет.
Вопрос из теста :

Цитата

You create an assembly by using Visual Studio .NET for your client, military agency. The assembly is responsible for writing and reading confidential data of military movement to and from an XML data file onto an encrypted hard drive.
You need to implement security in the assembly. What should you do?


  •  Implement declarative security and execute the permission demand to allow access to the file system.
  •  Implement imperative security and execute the permission demand to allow access to the file system.
  •  Implement imperative security and execute the minimum permission request to allow access to the file system.
  •  Implement declarative security and execute the minimum permission request to allow access to the file system.



Вопрос полностью понятен. Но с моделями безопасности я знаком мало.
Подозреваю, что Виста работает по каким-то таким концептам, когда в пользовательском режиме идут minimum permission requests to allow access to the file system, а чтобы получить доступ к разделам с повышенной защитой (%Program Files%, установка программ и тд), нужен как раз permission demand to allow access to the file system. В предложенном вопросе, вероятно, нужно делать именно permission request, ведь иначе на защищённый диск никакого доступа не дадут. Я правильно рассуждаю? И, вот declarative или imperative security? = Что это означает?


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
tol05
Дата 1.10.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата(marcusmae @  30.9.2007,  21:20 Найти цитируемый пост)
И, вот declarative или imperative security? = Что это означает? 

Декларативная - использование атрибутов типа [] перед методом или классом (или сборкой). Среда выполнения считывает атрибут перед выполнением метода или загрузкой класса (или сборки) в память.
Код

[FileIOPermissionAttribute(SecurityAction.RequestMinimum, All="C:\\example\\sample.txt")]
void MyMethod()
{
...

Императивная - достижение тех же целей кодингом
Код

FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C:\\test_r");
f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C:\\example\\out.txt");

Одним словом - это два пути решения одних и тех же задач. Декларативный метод срабатывает раньше (до выполнения кода), но императианый - гибче (может настраиваться в real-time)

я бы выбрал первый вариант (или второй), т.к. "minimum permission request" уж точно не разрешит
Цитата(marcusmae @  30.9.2007,  21:20 Найти цитируемый пост)
writing and reading confidential data



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
marcusmae
Дата 1.10.2007, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Атрибуты. Вот оно что. Понял.

Цитата(tol05 @  1.10.2007,  00:09 Найти цитируемый пост)
Одним словом - это два пути решения одних и тех же задач. Декларативный метод срабатывает раньше (до выполнения кода), но императианый - гибче (может настраиваться в real-time)


Ну а всё-таки, какой вариант из первых двух лучше в данной ситуации и почему?



--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
tol05
Дата 1.10.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



атрибут ограничен своей областью применения (см. AtributeUsage), например, для указанного атрибута объявление так выглядит
Код

[SerializableAttribute] 
[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Constructor|AttributeTargets.Method, AllowMultiple=true, Inherited=false)] 
public sealed class FileIOPermissionAttribute : CodeAccessSecurityAttribute

т.е. можно юзать для метода, но не для свойства. smile
с другой стороны императивный способ позволяет работать даже с часью метода (от точки затребования полномочий до выхода из метода или до изменения требований в том же методе). Т.е. в любом фрагменте кода. 
При затребовании полномочий может возникнуть исключение. Для императивного способа ты должен сам обработать исключение - для декларативного - если возникнет исключение - труба дело. Вылетим из программы.
Поэтому императивный способ имхо лучше. 
Единственное, когда применяется декларативный способ - проверки среда выполнения делает сама. Например, если для сборки указан атрибут - среда выполнения сама проверяет по всему коду нет ли недопустимых действий. Используется рефлексия и если метод А вызывает метод В, причем метод В требует полномочий, котрые метод А отвергает, то затребования полномочий не будет.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
marcusmae
Дата 1.10.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Императивная стратегия даёт возможность самостоятельно заниматься контролем исключений. Понятно.

Хорошо, а вот, допустим, использование атрибута
Код

[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=true, AllowMultiple=false)] 
public sealed class ParamArrayAttribute : Attribute

чем отличается от использования ключевого слова params? Описанные Вами правила поведения здесь действуют, т.е. является ли это примером декларативности/императивности? Что-то не очень понимаю, в чём бы это могло выразиться...

Это сообщение отредактировал(а) marcusmae - 1.10.2007, 18:10


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
tol05
Дата 1.10.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



тут даже не в секьюрити дело. Я смотрю. тема вырождается в объяснение правил использования атрибутов...  и синтаксиса С#? smile

Да, это декларативное программирование, но атрибут - это специфическая конструкция, предназначенная для использования рефлексией и описать ее можно тоже только через конструкции, понятные рефлексии, т.е. декларативно. 
Секъюрити здесь ни при чем. Декларативное программирования секъюрити возможно лишь потому, что среда выполнения, при работе с кодом любит и умеет работать с рефлексией. Но не нужно путать причину со следствием. Секъюрити просто использует (как дополнительную, или альтернативную,  возможность своей настройки) сушествующую технологию рефлексии (атрибутов), вот и все.

различия между params keyword и ParamArrayAttribute описаны в msdn
Цитата

Prefer the language constructs over this attribute        David M. Kean - MSFT   |   Edit   |   Show History (1)  

Please Wait   
 You should never need to use this attribute directly. Instead make use of the params keyword in C# and ParamArray keyword in Visual Basic.

The following example shows a method that takes a variable number of arguments.

[C#]
 
public void MethodWithVariableArguments(params string[] arguments){}

[Visual Basic]
 
Public Sub MethodWithVariableArguments(ByVal ParamArray arguments As String())
 
End Sub





--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
marcusmae
Дата 1.10.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Цитата(tol05 @  1.10.2007,  19:21 Найти цитируемый пост)
Я смотрю. тема вырождается в объяснение правил использования атрибутов...  и синтаксиса С#?

Действительно недостаточно хорошо понимаю атрибуты. Теперь вроде по-лучше. Именно потому и спросил, что фраза

Цитата(tol05 @  1.10.2007,  19:21 Найти цитируемый пост)
You should never need


является весьма мягким пожеланием, и причин/каких-либо различий не объясняется.


tol05, большое спасибо за Ваши ответы. Я узнал много нового.


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.