AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.09.2008, 20:12   #14  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
получается (если я правильно понял по аглицки):
1. Проверка, что код имеет соответствующее разрешение по стеку вызовов (интересно - какой стек вызовов должен быть, чтобы он не прошел проверку - просто без этого кода?)
Насколько я понимаю, принцип примерно такой:
  • по ходу выполнения кода клиентом API запрашиваются разрешения на выполнение тех или иных действий (создается экземпляр CodeAccessPermission и дергается assert()) - это приводит к тому, что в стеке вызовов создается некий security cookie (видел такой термин в отладочной информации ядра 4-ки), соответствующий запрошенным разрешениям
  • выше по стеку вызовов клиента API вызывается код, который использует некий API, требующий разрешений - при этом владелец API создает соотв. экземпляр класса-наследника CodeAccessPermission и дергает на нем метод demand()
  • ядро пробегается по стеку вызовов вниз и ищет соотв. security cookie; соответствие определяется тем, что созданному во владельце API экземпляру класса-наследника CodeAccessPermission в метод isSubsetOf() подсовываются экземпляры запрошенных разрешений (созданных в клиенте API классов-наследников CodeAccessPermission)
  • если в какой-то момент созданный владельцем API экземпляр вернет из isSubsetOf() true, то считается, что разрешение найдено, и дальше выполняется код API, следующий за вызовом demand()
  • если на протяжении всего стека вызовов клиента API подходящий security cookie не найден, ядро выбрасывает исключение
  • если код клиента API выходит из метода, в котором было запрошено разрешение (вызван assert()), то на созданных разрешениях вызывается revertAssert(), и security cookie удаляются; revertAssert() можно, конечно, вызвать и раньше, не дожидаясь выхода из метода. Таким образом, код клиента API, в который вернется управление из метода, запросившего разрешение, уже не сможет воспользоваться этим разрешением, потому что оно будет отсутствовать в стеке вызовов
В общем, смысл в том, что разрешение, если идти по стеку вызовов, должно быть получено раньше, чем будет использован соотв. API, вот и все.
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
2. Проверка, что вызов опасного API был вызван из "доверенного" кода, сохраненного в АОТ. А какой код не доверенный? Не сохраненный в АОТ?. Интересно - во-первых - как такой код исполняется (в Аксапте) и даже не столько это, а сколько то, что в Аксапте так просто создать код, сохраненный в АОТ и вызвать "опасный" код оттуда - что при желании так сделать - это сделать все равно можно.
Насколько я понимаю, "ноги" этих разрешений растут из .NET с его managed code. Не забывайте, что как код Х++ может вызывать .NET-сборки, так и внешний код может вызывать код Х++ через Business Connector, может, дело в этом...
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
3. Проверка, что код, вызывающий опасное API - вызывается это на той же стороне (клиент/сервер), что и само API. Вот это совсем непонятно.. Во первых вызвать код там где надо не составляет труда, а во-вторых - да какая разница?
Может, это связано с какими-то техническими ограничениями, подобно тому, как нельзя, скажем, вставлять данные с помощью экземпляра RecordSortedList, созданного на клиенте.
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Но тут и вопрос - если самому писать - то зачем тогда поддержка на уровне ядра?
Ради взаимодействия с CLR
За это сообщение автора поблагодарили: alex55 (1), player (1).
Теги
.net, cas, code access security, fileiopermission, interoppermission, security, безопасность

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
.NET коннектор + MSSQL Server Integration Delfins DAX: Программирование 3 28.08.2008 13:41
Inside Dynamics AX 4.0: Working with the .NET Business Connector Blog bot DAX Blogs 0 04.10.2007 05:15
aEremenko: Регистрация .NET Business Connector на MS SQL Server Blog bot DAX Blogs 0 29.10.2006 22:30
aEremenko: Диагностика проблем при установке Microsoft Dynamics Ax 4.0 на Microsoft SQL Server 2005 Blog bot DAX Blogs 0 28.10.2006 16:01
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:19.