![]() |
#1 |
Участник
|
![]()
Всем привет.
В ночной беседе с коллегой добрались до темы Business Connector'а. У объектов "Microsoft.Dynamics.BusinessConnectorNet.Axapta" и "Microsoft.Dynamics.BusinessConnectorNet.AxaptaRecord" есть функции "ExecuteStmt". Как известно, эта - обёртки над runTime-компиляцией кода по заданному шаблону. Возник вопрос - "не уязвимость ли это?". Забегая наперёд - да, это может быть использовано как уязвимость, но для этого должны выстроиться множество тел Солнечной системы. Поэтому данная тема, скорее, носит ознакомительный характер. Если в случае с функцией record'а используется шаблон: static void ComExecuteStmt(%1 _axTbl_0) { %2;} Об этом любезно информирует BC если несуразицу ему какую-то в качестве параметра передать: Unable to compile "static void ComExecuteStmt(Common axTbl_0) { наборсимволов2;} ".' То наличие аналогичной функции на объекте Axapta с шаблоном "static void ComExecuteStmt(){ %1 }" вызывает полное непонимание с позиции области её применения. Никто не запрещает написать код вида: X++: ax.ExecuteStmt("runBuf('void test(){Table1 t1;; t1.doInsert();}')"); Догадываюсь, что BC в современных реалиях не используется, а на его смену пришел AIF. Который, в свою очередь, является всё той же обёрткой над BC... |
|
|
За это сообщение автора поблагодарили: S.Kuskov (10). |
![]() |
#2 |
Участник
|
Мне кажется это зависит от прав доступа на таблицу.
Если учетка не админская и выставлены ограничения, то возможнотвставка и не сработает. Помнится была в 2009й особенность с утверждением пко/рко. Выдавалась ошибка записи в rcashtrans, на которую доступ обычно не давали юзерам. Приходилось отдельно давать права или в коде писать unchecked (...) Здесь может быть аналогично. |
|
![]() |
#3 |
Участник
|
Да, всё верно, это "одна из звёзд" и код этот клиентский. Приключения начинаются при переключении на серверное выполнение - просто это потенциальная уязвимость.
Последний раз редактировалось Товарищ ♂uatr; 24.06.2025 в 13:48. |
|