Всем привет.
В ночной беседе с коллегой добрались до темы 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...